我正在尝试实现一个简单的所有者绘制按钮,它只包含画笔中的图像.
这是我的代码(WTL,但它非常简单):
case WM_CTLCOLORBTN:
dc.SetBkMode(TRANSPARENT);
POINT pt = { 0 };
button.MapWindowPoints(m_hWnd, &pt, 1);
dc.SetBrushOrg(-pt.x, -pt.y, NULL);
return m_brushHeader;
Run Code Online (Sandbox Code Playgroud)
到目前为止一切正常,但为了正确的键盘支持,我必须添加焦点矩形.所以现在我也在处理这个WM_DRAWITEM消息:
case WM_DRAWITEM:
if(lpDrawItemStruct->itemAction & (ODA_DRAWENTIRE | ODA_FOCUS))
{
if((lpDrawItemStruct->itemState & ODS_FOCUS) &&
!(lpDrawItemStruct->itemState & ODS_NOFOCUSRECT))
{
dc.DrawFocusRect(&lpDrawItemStruct->rcItem);
}
else
{
// Need to remove the rectangle here!
}
break;
}
break;
Run Code Online (Sandbox Code Playgroud)
矩形已正确添加,但当焦点移动到另一个按钮,并且我收到ODA_DRAWENTIRE请求时,我必须清除它.
如何清除HDC的内容?我发现只有用颜色等填充它的方法.我需要将它变成空的/透明的,就像使用之前一样DrawFocusRect.
PS该应用程序使用视觉样式,即ComCtl32.dll版本6.
winapi ×1