我有一个使用带有WS_BORDER样式的CreateWindowEx创建的自定义控件。除了与对话框中的其他控件呈现不同颜色的边框外,一切正常。我控制的边框是黑色,其他控件有蓝色边框。我在创建控件后尝试调用EnableThemeDialogTexture(_dialogHandle,ETDT_ENABLE),以及来自http://www.patchou.com/projects/richedit/的逻辑,但无济于事。我正在使用C ++和Winapi。即。没有MFC,没有.Net。非常感谢任何指导。
编辑:这是对我有用的逻辑:
HDC hdc = GetWindowDC(hwnd);
HTHEME themeHandle = OpenThemeData(hwnd, L"Edit");
if(themeHandle)
{
int cxBorder = GetSystemMetrics(SM_CXBORDER);
int cyBorder = GetSystemMetrics(SM_CYBORDER);
RECT rc;
GetClientRect(hwnd, &rc);
OffsetRect(&rc, cxBorder, cyBorder);
ExcludeClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom);
InflateRect(&rc, cxBorder, cyBorder);
DrawThemeBackground(themeHandle, hdc, 0, 0, &rc, NULL);
CloseThemeData(themeHandle);
}
ReleaseDC(hwnd, hdc);
答案 0 :(得分:1)
您必须使用其他控件(例如,listview或treeview控件)中的主题自行绘制边框。对于自定义子控件,绘制边框非常简单 - 只需处理WM_NCPAINT消息即可。绘制边框时的零件ID和状态ID都应为0.