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

时间:2010-07-21 15:34:02

标签: c++ c winapi

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

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

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

不要告诉我必须使用SetWindowLong来控制allllllll我的控件上的窗口过程并拦截WM_PAINT :(

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

相关问题