Изменить цвет фона окна
Мне нужно изменить цвет фона окна (не диалоговое). Знаю 2 способа:
1) SetClassLong с параметром GCL_HBRBACKGROUND.
2) Ловить WM_ERASEBKGND, в котором закрашивать клиентскую область при помощи FillRect.
Но SetClassLong, на сколько я понимаю, изменит кисть во всех окнах данного класса. А мне нужно, чтобы фон изменился только в одном окне, а в других остался прежним.
Можно ли как-то по другому подменить кисть именно для данного окна или придется использовать WM_ERASEBKGND с FillRect?
WM_CTLCOLOR
Есть WM_CTLCOLORDLG, WM_CTLCOLOBTN...
она все подобные мессаги позволяет в одной функции обрабатывать. а сообщения на самом деле называются WM_CTLCOLOR*
прошу прощения за дезынфу
Окно, в котором нужно изменить цвет фона, моего класса, а не контрол и не диалоговое, поэтому вариации на тему WM_CTLCOLORxxx не подходят, т.к. окно родителю таких сообщений не посылает.
сорри!
Цитата: Sir
2) Ловить WM_ERASEBKGND, в котором закрашивать клиентскую область при помощи FillRect.
А почему ловить? Просто посылать:)
Нет Alfá, так не выйдет :)
Кому посылать? Самому себе? А потом опять таки ловить и обрабатывать?
Если не ловить, то DefWindowProc использует кисть, указанную при регистрации класса.
А в чем сложность WM_ERASEBKGND? Когда-то именно так я и делал... Конечно можно наверно и другими методами, но это будет изврат
Цитата: vAC
А в чем сложность WM_ERASEBKGND? Когда-то именно так я и делал... Конечно можно наверно и другими методами, но это будет изврат
Хочется где-нибудь подменить кисть, а не ловить WM_ERASEBKGND и красить при помощи FillRect. Но если это не возможно, то тогда остается только этот вариант.
Понятно, что ловить WM_PAINT и отслеживать состояние fErase это практически то же самое.
Remarks
The DefWindowProc function erases the background by using the class background brush specified by the hbrBackground member of the WNDCLASS structure. If hbrBackground is NULL, the application should process the WM_ERASEBKGND message and erase the background.