![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Народ, такая ситуация:
У меня у диалого перегружен WM_PAINT, рисую я там при поможи GDI+. То что нарисовала запоминаю в битмапину, что бы потом не мучатся. Если я запускаю программу, потом окно прекрываю/двигаю и т.д. все просто замечательно, но ... если я запускаю прогармму из студии и пока она не запустилась переключаюсь на другую , то в моем окне тарисавно то, что нарисовала другая программ. На моем HDC !!!!! При этом на каждом этапе рисования я у GDplus::Graphics беру GetLastSatatus - он показывает что прошло все хорошо. Но рисовал не он !!! А кто-то другой !!! В общем, что делать? Буду благодарна за любые мысли/идеи, просто предположения Добавлено @ 14:58 Самое противное, что если я создаю в WM_PAINT устройство совместимой тем что там получила и рисую в него, получаю черный квадрат малевича. Такое впечатление, что мои операции рисования были прерваны, хотя логи показывают что они все прошли нормально. Чертовщина какая-то Добавлено @ 15:00 И еще что интересно, если в лог выводить HDC (пришло вместе с WM_PAINT) приведенное к int`У то видно что при первой отрисовки оно одно а при всех последующих другое. Странно -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
могу ошибатся , но в некоторых случаях система пересоздает окно , и хдц может менятся
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Так бывает, когда фон не стирается, т.е. в классе окна не установлена кисть, и EraseBackgnd ничего не делает. Но мне не нравится другое: у тебя явно смешана логика рисования и вывода в окно. Раздели. Примерно так: 1) где-нибудь в начале создаем совместимый битмап, контекст и т.д. 2) заводим флаг content_valid. Изначально = false. 3) В OnPaint проверяем флаг, если false, вызываем функцию, которая обновляем нашу подложку (битмап). Кстати, не забывай его чистить перед рисованием. 4) Затем делаем простой блиттинг. У тебя получится 2 вида обновления окна: просто Invalidate() приводит к выводу того, что уже есть в битмапе. И установка content_valid в false + Invalidate - полная перерисовка. То, что получаются "черные квадраты", указывает, скорее всего, на ошибки при работе с совместимым контекстом \ битмапом. Сделай ясной логику перерисовки, тогда ошибку найти будет легче. -------------------- ... |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Earnest, Спасибо большое.
Проблема действительно была в тех случаях когда приходил WM_PAINT а перд ним не разу не приходил WM_ERACRBACKGROUND. Спасибо за идею разделения логики. Постараюсь реализовать. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |