Я могу выбрать задний цвет, когда я регистрирую класс, например:
wincl.hbrBackground = CreateSolidBrush(RGB(202, 238, 255));
RegisterClassEx(&wincl);
Но как я сделал бы это к какому-либо окну, которое я создал с функцией CreateWindow? как кнопка на моем главном окне, мне включили визуальные стили, и я могу заметить значение по умолчанию окон серый задний цвет позади кнопки.
Не говорите мне, что я имею к SetWindowLong для оконной процедуры на allllllll свои средства управления и прерываю 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 и рисуйте для окна все, что хотите. Существует множество руководств.