C++ win32: как задержать цвет окна?

Я могу выбрать задний цвет, когда я регистрирую класс, например:

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

Но как я сделал бы это к какому-либо окну, которое я создал с функцией CreateWindow? как кнопка на моем главном окне, мне включили визуальные стили, и я могу заметить значение по умолчанию окон серый задний цвет позади кнопки.

Не говорите мне, что я имею к SetWindowLong для оконной процедуры на allllllll свои средства управления и прерываю WM_PAINT :(

1
задан Kaije 21 July 2010 в 15:34
поделиться

2 ответа

Все элементы управления окнами посылают сообщение своему родителю, чтобы получить кисть для заливки фона. Предполагая, что вы где-то сохранили копию ручки кисти, вы можете сделать следующее в 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;
2
ответ дан 2 September 2019 в 22:52
поделиться

Если вы хотите получить индивидуальное окно, вы можете создать свой собственный класс окна для рисования такого типа окна. Реализуйте обработчик для wm_paint и рисуйте для окна все, что хотите. Существует множество руководств.

0
ответ дан 2 September 2019 в 22:52
поделиться