2010-07-21 259 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实现一个处理程序,并为窗口绘制任何你想要的东西。有很多教程可用。