Настройка: У меня есть окно верхнего уровня с определенной областью (созданной с помощью SetWindowRgn()
), и у меня есть дочерний элемент, который перемещается (с помощью SetWindowPos()
) так, что некоторые иззатем его пиксели перекрывают обрезанную часть области окна родителя.
Результат: Эти пиксели заполняются полностью непрозрачными, полностью белыми пикселями, вместо того, чтобы оставаться полностью прозрачными (так как он находится вне егорегион родителей).Дело не в том, что дочернее окно рисуется тогда, когда оно не должно, так как пиксели-нарушители имеют белый цвет независимо от того, как выглядит дочернее окно.
Ниже маленькое оранжевое дочернее окно было перемещено вокругнемного по краю родителя.Это происходит только по краям, которые имеют прозрачную область окна (поэтому белые пиксели всегда ограничены в пределах максимального прямоугольника родительского окна).
Все исправляется, еслиродительское окно скрыто и затем показывается (просто аннулирование и принудительное перерисовывание не очищают белые пиксели).
Это наблюдалось как в Vista, так и в 7. Это поведение исчезает, если я отключаю диспетчер окон рабочего стола (DWM).В одном случае он также исчез после обновления графических драйверов.Возможно, это связано с этой проблемой ?: Проблема живых миниатюр в Vista с SetWindowRgn .Первоначально я собирался просто подать это как редкую ошибку, но она появилась достаточно, чтобы заслуживать более тщательного изучения.
Кто-нибудь еще сталкивался с этим раньше?Любое понимание того, как области DWM и области окна взаимодействуют?
Кроме того, я знаю, что могу отключить DWM для каждого приложения, но это отключает его для всего во время работы приложения, в дополнение к тому, что экран мигаетпри запуске и завершении работы, и это действительно не намного лучшая проблема.