在创建窗口后,如何为窗口设置颜色?

6

我创建了一个窗口,其句柄为handle_parent。然后我创建了一个子窗口,如下所示:

hwnd_child = CreateWindow(child_class_name, _T(""),
WS_CHILDWINDOW, 0, 0, 0, 0, hwnd_parent, (HMENU)0, ghinst, NULL);
ShowWindow(win->hwndSplitterBar, SW_SHOW);
UpdateWindow(win->hwndSplitterBar);

我想设置子窗口"child"的颜色。如果我什么都不做,默认情况下颜色是灰色的。 我该如何设置它的颜色?我希望将其颜色永久保持为黑色,无论任何情况下都不改变。


你是如何绘制子窗口的? - David Heffernan
我根本不会绘制它......难道没有直接的方法可以做到这一点,比如设置背景颜色(hwnd_child)之类的东西吗?我找不到这样直接的方法,所以来到了这里。如果需要自己完成绘制,我不知道该怎么做。 - user565739
3个回答

5
创建所需颜色的画笔,然后在调用 RegisterClass 注册窗口类时,将其传递到 WNDCLASS 结构体的 hbrBackground 成员中。
系统会在调用 UnregisterClass 时自动删除此画笔,因此一旦将此画笔传递给 RegisterClass,您可以忘记它,并且不得尝试自行删除它。

5
这个例子可能会有所帮助:
//Setting the background color of a window during window class registration
WNDCLASS wc = { 0 } ( or WNDCLASS wc; memset(&wc, 0, sizeof(wc)); )
...
...
...
wc.hbrBackground = CreateSolidBrush(0x000000ff); // a red window class background
...
...
RegisterClass(&wc);

// Setting the background during WM_ERASEBKGND
LRESULT CALLBACK YourWndProc(HWND hwnd, UINT umsg, WPARAM,LPARAM)
{
   switch( umsg )
   {
      case WM_ERASEBKGND:
      {
         RECT rc;
         GetClientRect(hwnd, &rc);
         SetBkColor((HDC)wParam, 0x000000ff); // red
         ExtTextOut((HDC)wParam, 0, 0, ETO_OPAQUE, &rc, 0, 0, 0);
         return 1;
      }
      // or in WM_PAINT
      case WM_PAINT:
      {
         PAINTSTRUCT ps;
         RECT rc;
         HDC hdc = BeginPaint(hwnd, &ps);
         GetClientRect(hwnd, &rc);
         SetBkColor(hdc, 0x000000ff); // red
         ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &rc, 0, 0, 0);
         EndPaint(hwnd, &ps);
         break;
      }
      ...
      ...
      ...
      default:
         return DefWindowProc(...);
   }
   return 0;
}

0

使用CreateSolidBrush()函数:

WNDCLASS wc = { 0 } (或者WNDCLASS wc; memset(&wc, 0, sizeof(wc));) ... wc.hbrBackground = CreateSolidBrush(RGB(255,0,0)) 或者 CreateSolidBrush(0x000000ff); // 窗口类的红色背景


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接