![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Dimitry |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Мне нужно на диалоговой панели разместить прямоугольник (либо объект static) с заданным RGB цветом фона.
Объект остается неизменным. Не пойму в чем дело. Заранее спасибо. |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: нет Всего: 25 |
||||
|
||||
Dimitry |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Мне, вообще, хотелось бы узнать, в чем моя ошибка (обращая внимание на выше указанный код). Если так вообще можно закрасить объект static.
Спасибо за внимание. И дело в том, что в MFC я, еще пока, очень плохо разбираюсь. ![]() |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
|
|||
|
||||
dizzy1984 |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: нет Всего: 25 |
В вашем коде я вижу 2 проблемных момента.
Во-первых, PaintWindow не делает ничего, хотя, судя по ее названию, она предназначается для закраски окна.
Между ними как минимум должна стоять закраска, но и сами эти строки неправильные. SelectObject возвращает дексриптор старого объекта вобранного в контекст, hBrush затирается. Лучше сделать
Потом позднее
Второй раз вызывать SelectObject вообще не стоит. Закрасить часть окна можно скажем с помощью Rectangle
Второй момент в том что физию вам портит строка
которая делает следующее. Она добавляет всю клиентскю область к региону для последующей отрисовки которая происходит в ответ на сообщение WM_PAINT посланное сразу после того, как опустеет очередь сообщений, т.е практически после появляния на экране окна. Таким образом если бы вы имели счастье написать процедуру PaintWindow верно, вы бы все равно ничего не заметили, т.к фон окна почти сразу же был бы перерисован. Ваш вариант будет работать вплоть до первого сообщения WM_PAINT (а скорее всего даже WM_CTLCOLOR), после которого фон перерисуется. В windows для того что вы хотите есть сообщение WM_CTLCOLOR, которое посылается окну, непосредственно перед отрисовкой его фона. Т.е в самом нужном для вас месте. Вам нужно ответить на это сообщение и вернуть дескриптор кисти с заданным вами цветом. windows использет его для последующей отрисовки. Это сообщение отредактировал(а) dizzy1984 - 16.5.2007, 06:05 |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |