|
0 / 0 / 1
Регистрация: 13.11.2015
Сообщений: 10
|
||||||
WM_SIZE и перерисовка окна02.05.2016, 11:23. Показов 7713. Ответов 5
Метки нет (Все метки)
Добрый день. Всех с праздником!
Возникла такая проблема: при максимизации\минимизации или любом другом изменении размеров окна, или при перетаскивании всего окна за границы экрана из клиентской части пропадает все нарисованные примитивы. В какой-то теме здесь на форуме человеку с аналогичным вопросом посоветовали при получении сообщения WM_SIZE делать InvalidateRect с ложным булевым параметром. У меня такое решение не сработало. Подскажите, пожалуйста, как с этим бороться? Вот кусок кода, где по идее это все должно быть реализовано.
0
|
||||||
| 02.05.2016, 11:23 | |
|
Ответы с готовыми решениями:
5
Как помимо сообщения WM_SIZE получить размеры клиентской области окна? Перерисовка окна Перерисовка окна |
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
| 03.05.2016, 07:45 | |
|
Invalidate - это всего лишь способ вручную вызвать обработчик WM_PAINT, (то есть вызов перерисовки окна). Поэтому, что бы такой способ работал, рисование фигур должно происходить в WM_PAINT. А где у тебя WM_PAINT?
Судя по всему ты рисуешь свои фигуры просто в контекст окна при нажатии кнопки. Конечно при перерисовке окно очищая фон всё сотрет и они пропадут. И как то странно у тебя "case WM_SIZE" затесался в switch от "case WM_COMMAND". Его там быть не должно.
0
|
|
|
0 / 0 / 1
Регистрация: 13.11.2015
Сообщений: 10
|
||||||
| 03.05.2016, 17:22 [ТС] | ||||||
|
Спасибо большое, что ответили!!!
Насчет case WM_SIZE - я когда у преподавателя попросил помощи по этому же вопросу, он сказал сделай обработку сообщения WM_SIZE, а на мой вопрос, куда впихнуть эту обработку, он сказал в switch(wmId). Ну, как сказал, я так и сделал.
0
|
||||||
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
| 04.05.2016, 19:36 | |
|
Да, рисуешь правильно, а WM_SIZE не может быть внутри WM_COMMAND. То ли препод чего-то сморозил, то ли ты не так его понял. Это же самостоятельное сообщение, а не подпараметр WM_COMMAND'а. Поэтому твой обработчик WM_SIZE никогда не срабатывает и передается в DefWindowProc. (Поставь в нем брекпоинт и сам это увидишь.)
Сделай обработчик WM_SIZE отдельным, т.е. таким же как обработчики WM_MOUSEMOVE, WM_PAINT и др. (в смысле вынеси его из switch'а WM_COMMAND), тогда должно заработать. Если не получится очисти проект, заархивируй и прикрепи во вложение, а то так на пальцах трудно разбираться.
1
|
|
|
0 / 0 / 1
Регистрация: 13.11.2015
Сообщений: 10
|
|
| 04.05.2016, 20:32 [ТС] | |
|
Да это я, наверное, не правильно понял преподавателя. Сделал как вы сказали и все действительно получилось, правда теперь появилась новая проблема: при изменении размеров окна теперь сохраняется только последний нарисованный объект, т.е., если я подряд нарисую 10 эллипсов, то потом, изменив размер окна, на экране сохранится только последний 10-ый эллипс.
Прикрепил проект.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 04.05.2016, 21:09 | ||
|
Твой WM_PAINT перерисовывает только ту часть окна, которая стала поверх другого. Т.е. то что у тебя сохраняются старые фигуры - это иллюзия, на самом деле фигуры уже нет, если ты частично сдвинеш другое окно на своё, то увидиш, что останутся части старых фигур.
0
|
||
| 04.05.2016, 21:09 | |
|
Помогаю со студенческими работами здесь
6
Перерисовка окна
Перерисовка окна Перерисовка окна Перерисовка окна Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|