После создания окна (...), как дать окну цвет?
Я создал окно, дескриптор которого 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); // красный фон окна класса