c ++ win32:如何设置窗口的颜色?

我可以在注册课程时设置背面颜色,例如:

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

但是,我如何使用CreateWindow函数创建的任何窗口? 就像我的主窗口上的按钮,我启用了视觉样式,我可以注意到按钮后面的窗口默认灰色背面颜色。

不要告诉我,我必须为我的控件上的窗口过程设置SetWindowLong并拦截WM_PAINT 🙁

所有窗口控件都会向其父级发送一条消息,以使刷子用于填充其背景。 假设您在某处保存了画笔句柄的副本,您可以在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; 

如果您想要一个自定义窗口,您可以创建自己的窗口类来绘制该类型的窗口。 为wm_paint实现一个处理程序,并为窗口绘制任何你想要的东西。 有很多教程可供使用。