Loopback
|
Posted: Tue Sep 09, 2025 20:25 Post subject: |
|
|
Orion9 wrote: | В общем, как будет возможность, посмотрите - увидите о чем речь. |
Не понадобилась даже 11, на десятке ведет себя ровно так же, и на 7, и даже XP. Сходу найти информацию по теме классическим методом не удалось, а нейросеть утверждает, что это несовместимость WS_EX_COMPOSITED и WM_SETREDRAW:
 Hidden text
Сочетание WS_EX_COMPOSITED и WM_SETREDRAW с параметром 0 приводит к исчезновению окна из-за фундаментального конфликта этих двух механизмов.
Стиль WS_EX_COMPOSITED переводит окно в режим двойной буферизации на уровне системы. Вся его отрисовка происходит в отдельном буфере в памяти, который затем целиком выводится на экран. Этот процесс требует, чтобы система постоянно могла обновлять этот буфер в ответ на любые изменения.
Сообщение WM_SETREDRAW с параметром 0 является директивой полностью заблокировать все процессы перерисовки для окна. Когда это сообщение применяется к окну с WS_EX_COMPOSITED, система лишается возможности поддерживать его буфер в актуальном состоянии. В результате она продолжает отображать последний известный "снимок" буфера, который, если обновления были заблокированы в самом начале, часто оказывается пустым или невалидным. Это приводит к визуальному исчезновению как самого окна, так и его значка в панели задач, который является его представлением.
Отправка WM_SETREDRAW с параметром 1 снимает блокировку. Система немедленно инициирует полную перерисовку, восстанавливая актуальное состояние буфера в памяти, что моментально возвращает окно и его значок на экран.
Вывод: Эти две технологии несовместимы. WS_EX_COMPOSITED требует постоянной фоновой перерисовки, которую WM_SETREDRAW явно запрещает. Для массовых обновлений в таком окне следует использовать другие методы (например, скрытие окна или методы конкретных контролов).
К таким ответам следует относиться с осторожностью, но насколько я могу судить, выглядит похоже на правду.
К слову, если не выполнять SetLayeredWindowAttributes, а только добавить WS_EX_COMPOSITED - окно тотала просто пропадает... |
|