2010-07-21 263 views
0

我可以設置背景色當我登記類,例如:C++ win32:如何設置窗口的顏色?

wincl.hbrBackground = CreateSolidBrush(RGB(202, 238, 255)); 
RegisterClassEx(&wincl); 

但我怎麼會那樣對我與CreateWindow函數創建的窗口? 就像我的主窗口上的一個按鈕,我啓用了視覺樣式,並且我可以注意到按鈕後面的窗口默認灰色背景顏色。

不要告訴我,我必須SetWindowLong函數對allllllll我的控制窗口過程,並攔截WM_PAINT :(

回答

1

所有的窗口控件都會發送一條消息給他們的父窗口,讓它用來填充它們的背景 您可以在某處保存筆刷手柄的副本,您可以在WindowProc或DialogProc中執行以下操作,以確保使用正確的背景繪製所有內容趨之若鶩。

case WM_CTLCOLORSTATIC: 
case WM_CTLCOLORBTN: 
    HDC hdc; 
    HWND hwndCtl; 
    POINT pt; 
    hdc = (HDC)wParam; 
    hwndCtl = (HWND)lParam; 
    pt.x = 0; 
    pt.y = 0; 
    MapWindowPoints(hwndCtl,_hwnd,&pt,1); 
    x = -pt.x; 
    y = -pt.y; 
    SetBrushOrgEx(hdc,x,y,NULL); 
    return (INT_PTR)_skinBrush; 
0

如果你想有一個自定義的窗口中,您可以創建自己的窗口類得出這樣類型的窗口。爲wm_paint實現一個處理程序,併爲窗口繪製任何你想要的東西。有很多教程可用。