| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > WM_SIZE, Invalidate & CompatibleDC |
| Автор: Nastya 22.11.2006, 13:31 |
| Вот в чем вопрос. Ко мне пришел WM_SIZE и так складываются отбстоятельство что мне надо перерисовать все окно со всеми контролами на них. Как сделать так: 1. создаею временное DC 2. Все перерисовываю в него (?) т.е. Invalidate(true) - Как-то направить в мое HDC 3. Блитаю В общем проблема в основном во 2-м пункте |
| Автор: Earnest 22.11.2006, 17:36 |
| Если окно твое, и ты сама его рисуешь, то в чем проблема? Выдели функцию рисования в заданный контекст из OnPaint, и пользуйся. Но вообще-то как-то плохо звучит, перерисовка на OnSize. Чтобы тебе не сделать Invalidate? И пусть перерисовывается, когда виндовсу удобно... Или вообще в стиль класса добавить CS_HREDRAW | CS_VREDRAW, тогда само будет... |
| Автор: Nastya 23.11.2006, 09:31 |
| Я наверное не понятно объяснила. Вот сомтри. у меня идет WM_SIZE - при этом меняются размеры положения/кучи контролов, многие из них сами по себе тяжеловаты в отрисовки. И получается что у меняна WM_SIZE - именно потому что куче контролов приходит WM_PAINT, и идет множетсво блитов на один DC. Как бы исхитрится так: чтобы сказать что вот сейчас все блиты идут в совместимое устройство, а потом я их проресую ? |
| Автор: Earnest 23.11.2006, 11:06 |
| Все равно не очень поняла, в чем проблема. Но если в том, что resize, скажем, диалога приводит к каскадному перемещению множества контролов, что выражается в подергивании, то попробуй вместо MoveWindow\SetWindowPos отложенное перемещение: BeginDeferWindowPos\DeferWindowPos\EndDeferWindowPos. Это гарантирует, что все будут перерисовано один раз, на завершение. |
| Автор: Nastya 23.11.2006, 11:53 | ||
Я даже раньше про такие не слышала - класс, стало немного лучше Еще вопрос в дагонку. когда я максимизирую окно, оно 1. Мувет его в точку 0;0 2. Перерисовывает со старым размером 3. Резайзит 4. перерисовывает сновым. ОТ таго в этом месте все торомзит. При этом твои три волшебные функции тут не помогают Есть какая еще идея? |
| Автор: Earnest 23.11.2006, 15:07 |
| Боюсь, нет идеи... Добавлено @ 15:08 А можь его сначала скрыть, а потом восстановить максимизированным? |
| Автор: Nastya 23.11.2006, 17:00 | ||
Вся проблема в том, что в XP c разными вариантами настроек системы(лучший вид/лучшее быстродействие) система ведет себя по разному, и шлет разную поледовательность сообщени Но spy++ мне показал именно такую последовательность сообщений |