Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменить цвет фона окна

8.4K
21 января 2007 года
Sir
52 / / 28.07.2006
Помогите, пожалуйста, решить следующую проблему.

Мне нужно изменить цвет фона окна (не диалоговое). Знаю 2 способа:

1) SetClassLong с параметром GCL_HBRBACKGROUND.

2) Ловить WM_ERASEBKGND, в котором закрашивать клиентскую область при помощи FillRect.

Но SetClassLong, на сколько я понимаю, изменит кисть во всех окнах данного класса. А мне нужно, чтобы фон изменился только в одном окне, а в других остался прежним.

Можно ли как-то по другому подменить кисть именно для данного окна или придется использовать WM_ERASEBKGND с FillRect?
355
21 января 2007 года
<SCORP>
786 / / 21.10.2006
WM_CTLCOLOR
16K
21 января 2007 года
Alfá
59 / / 12.01.2007
<SCORP>, а что это за сообщение?
Есть WM_CTLCOLORDLG, WM_CTLCOLOBTN...
355
21 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
эээ.. видать я под студией сильно запрограммился :)
она все подобные мессаги позволяет в одной функции обрабатывать. а сообщения на самом деле называются WM_CTLCOLOR*
прошу прощения за дезынфу
8.4K
21 января 2007 года
Sir
52 / / 28.07.2006
[QUOTE=<SCORP>;168441]WM_CTLCOLOR[/QUOTE]

Окно, в котором нужно изменить цвет фона, моего класса, а не контрол и не диалоговое, поэтому вариации на тему WM_CTLCOLORxxx не подходят, т.к. окно родителю таких сообщений не посылает.
355
21 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
понял, провтык.
сорри!
16K
21 января 2007 года
Alf&#225;
59 / / 12.01.2007
Цитата: Sir
2) Ловить WM_ERASEBKGND, в котором закрашивать клиентскую область при помощи FillRect.


А почему ловить? Просто посылать:)

8.4K
21 января 2007 года
Sir
52 / / 28.07.2006
[QUOTE=Alf&#225;;168453]А почему ловить? Просто посылать:)[/QUOTE]

Нет Alf&#225;, так не выйдет :)

Кому посылать? Самому себе? А потом опять таки ловить и обрабатывать?
Если не ловить, то DefWindowProc использует кисть, указанную при регистрации класса.
505
21 января 2007 года
vAC
343 / / 28.02.2006
А в чем сложность WM_ERASEBKGND? Когда-то именно так я и делал... Конечно можно наверно и другими методами, но это будет изврат
8.4K
22 января 2007 года
Sir
52 / / 28.07.2006
Цитата: vAC
А в чем сложность WM_ERASEBKGND? Когда-то именно так я и делал... Конечно можно наверно и другими методами, но это будет изврат



Хочется где-нибудь подменить кисть, а не ловить WM_ERASEBKGND и красить при помощи FillRect. Но если это не возможно, то тогда остается только этот вариант.

Понятно, что ловить WM_PAINT и отслеживать состояние fErase это практически то же самое.

505
22 января 2007 года
vAC
343 / / 28.02.2006
Боюсь что подменить не получиться, т.к. DefWindowProc берет цвет из класса, насколько я понимаю это из МСДН о WM_ERASEBKND:

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.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог