После создания окна (...), как дать окну цвет?

Я создал окно, дескриптор которого 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". Если я ничего не делаю, по умолчанию цвет серый. Как я мог установить его цвет? Я хотел бы, чтобы цвет оставался черным постоянно, меняйте в любом случае.

3 ответа

Решение

Создайте кисть нужного цвета и затем передайте ее в hbrBackground член WNDCLASS структура при звонке RegisterClass зарегистрировать свой класс окна.

Система автоматически удалит эту кисть при вызове UnregisterClass так как только вы передали эту кисть RegisterClass Вы можете забыть все об этом и не должны пытаться удалить это самостоятельно.

Этот пример может быть полезен:

//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;
}

Используйте CreateSolidBrush ()::

WNDCLASS wc = {0} (или WNDCLASS wc; memset(&wc, 0, sizeof(wc));) ... wc.hbrBackground = CreateSolidBrush(RGB(255,0,0)) или CreateSolidBrush(0x000000ff); // красный фон окна класса

Другие вопросы по тегам