2013-01-06 95 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

相關問題