|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|
CS_SAVEBITS не отменяет WM_PAINT?26.07.2021, 14:54. Показов 3597. Ответов 11
Метки нет (Все метки)
Есть у стилей классов окон Windows флаг CS_SAVEBITS. Согласно документации, при выводе такого окна на экран Windows запоминает накрытую им часть экрана в виде картинки, а при убирании окна не посылает нижележащим окнам сообщение WM_PAINT, а просто восстанавливает запомненную картинку.
Проверяю: Написал примитивнейшую тестовую программу, в которой выставлено CS_HREDRAW+CS_VREDRAW+CS_SAVEBITS, и которая единственное что делает - это выводит в центре своего окна и в его заголовке счётчик пришедших WM_PAINT. Запускаю эту программу два раза, одно из окон сильно уменьшаю и накрываю им счётчик в центре второго окна, после чего, щелкая мышкой по Панели задач, маленькое окно сворачиваю-восстанавливаю, сворачиваю-восстанавливаю, сворачиваю-восстанавливаю... И обнаруживаю, что после каждого сворачивания счётчик у большого окна увеличивается на 1. То есть, сообщение WM_PAINT этому окну приходит! Почему? (Для полноты картины: если маленькое окно не сворачивать, а просто закрыть всю программу (хоть крестиком, хоть через Панель задач), то счётчик тоже увеличивается.)
0
|
|
| 26.07.2021, 14:54 | |
|
Ответы с готовыми решениями:
11
Яндекс отменяет .... интернет?! webkit отменяет скрипт
|
|
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
|
|
| 26.07.2021, 21:20 | |
|
Примерно воспроизвел всё по написанному в теме, счетчик увеличивается только у сворачиваемого окна при разворачивании, при изменении его размеров, при возврате его после выхода за экранную область.
При перекрытии одного окна другим, да хоть полностью развернутым любым другим, со стилем CS_SAVEBITS или без него счетчик не изменятся.
0
|
|
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|||||||
| 27.07.2021, 02:29 [ТС] | |||||||
|
Я не большой знаток C++ и обычно пишу на совершенно другом языке, но сейчас залез в VisualStudio и, как сумел, соорудил там аналог того теста, с которым работал изначально.
("Как сумел" - это значит: преобразование из числа в строку по-человечески сделать так и не смог, строка тупо наращивается новыми значениями.) Но результат работы этой программы такой же - при сворачивании второго (маленького) экземпляра у первого (большого) счётчик растёт. Где у меня в программе ошибка? Кликните здесь для просмотра всего текста
Добавлено через 6 минут Добавлено через 1 час 42 минуты Я тут присмотрелся повнимательнее к тому, что происходит при моих сворачиваниях-разворачиваниях, и появилось подозрение, что CS_SAVEBITS я несколько "переоценил": после первого сворачивания окна сообщение WM_PAINT и в самом деле не приходит, но стабильно идёт после всех последующих. Выходит, флаг CS_SAVEBITS "одноразовый"? И картинка запоминается не при каждом появлении окна на экране, а только при самом первом?
0
|
|||||||
|
Just Do It!
|
|||||||
| 27.07.2021, 10:52 | |||||||
0
|
|||||||
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|
| 27.07.2021, 18:28 [ТС] | |
|
XLAT,
Спасибо. "Буду знать." Добавлено через 14 минут Кстати, может кому будет полезно: Я разобрался, что происходит. Для окон с флагом CS_SAVEBITS есть кучка условий (событий), при которых запомненное изображение становится для Windows недействительным, и потом при убирании окна потребуется перерисовка подложки. Среди этих событий: перемещение окна или изменение его размера. А при сворачивании/разворачивании окна в него приходят сообщения WM_MOVE и WM_SIZE. Дальше понятно. Так что да, флаг "одноразовый": картинка запоминается при создании окна, а не при каждом его появлении.
0
|
|
|
COM‐пропагандист
|
|
| 30.07.2021, 13:31 | |
|
Если вам нужно «отключить» WM_PAINT и рисовать окно самостоятельно, то сделайте окна слоёным, указав стиль WS_EX_LAYERED.
0
|
|
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|
| 30.07.2021, 13:50 [ТС] | |
|
Нет-нет, мне было нужно, чтобы при исчезновении моего окна с экрана нижележащие окна не получали WM_PAINT.
Но вся идея с исчезновением окна - это попытка (способ) решения другой задачи: добраться до пикселов изображения в области экрана, лежащей под окном моей программы. Причём идея изначально корявая. А я уже нашёл другой, идеальный способ получить желаемое. К моему удивлению - именно с использованием WS_EX_LAYERED. (К удивлению - потому что это побочный эффект данного флага, в документации не описанный.)
0
|
|
|
COM‐пропагандист
|
|
| 30.07.2021, 18:04 | |
|
Начиная с Висты, сообщение WM_PAINT при перекрытии окон не отправляется: система хранит картинку окна и показывает её самостоятельно.
0
|
|
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|
| 30.07.2021, 18:10 [ТС] | |
|
Да? А как в таком случае можно объяснить результаты эксперимента, о котором говорится в моём первом сообщении?
0
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||
| 30.07.2021, 18:24 | ||
Не сходится история
0
|
||
|
COM‐пропагандист
|
||
| 30.07.2021, 20:28 | ||
0
|
||
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
|
|
| 30.07.2021, 20:55 [ТС] | |
|
0
|
|
| 30.07.2021, 20:55 | |
|
Помогаю со студенческими работами здесь
12
СМА: indesit WIUL 83, Не отменяет программу Обработчик события не отменяет действия по умолчанию. Отмена вложенной задачи отменяет задачу-родителя Wordpress самостоятельно отменяет мои правки в коде? Яндекс.Директ отменяет "входную плату" в контекстн Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
/ / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров)
. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|