2013-01-06 32 views
0

我有使用具有WS_BORDER风格的CreateWindowEx创建的自定义控件。除了边框以与对话框中的其他控件不同的颜色显示外,一切正常。我的控件中的边框是黑色的,其他控件有蓝色边框。我在创建控件后尝试调用EnableThemeDialogTexture(_dialogHandle,ETDT_ENABLE),以及http://www.patchou.com/projects/richedit/的逻辑,但无济于事。我使用C++和Winapi。即。没有MFC,没有.Net。任何指导非常感谢。将Windows主题应用于具有WS_BORDER风格的自定义控件

编辑:这里是为我工作的逻辑:

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); 

回答

1

你要自己绘制的边框,将主题从另一个控制(例如,列表视图或TreeView控件)。对于自定义子控件,绘制边框非常简单 - 只需处理WM_NCPAINT消息即可。绘制边框时的零件ID和状态ID都应为0.

+0

感谢您的回复。现在正在工作。我已经修改了我的帖子以显示我正在使用的逻辑,以防万一它帮助别人。 – fhevol

相关问题