окна под не окрашены при использовании многослойного окна - PullRequest
0 голосов
/ 17 мая 2010

Я постараюсь объяснить мою проблему как можно лучше,

Я создаю многослойное окно в c ++ (с использованием windowsXP), все работает нормально, пока я не перетаскиваю свое созданное окно рядом с кнопкой запуска Windows, а затем, когда я нажимаю звездную кнопку панели задач Windows и закрываю ее снова, все окна под моим многослойным окном не красятся (только в той части стартового окна, которая появляется над моим окном).

Мое окно создания выглядит так:

CWnd :: CreateEx (WS_EX_TOOLWINDOW | WS_EX_LAYERED, AfxRegisterWndClass (0), lpstr_name, WS_POPUP, 0,0,0,0, pc_parent-> GetSafeHwnd (), 0);

...

Когда я создаю окно с этими стилями, проблема возникает, но если я создаю с расширенным стилем WS_EX_TRANSPARENT и всеми остальными, проблема больше не возникает. И если вместо окна WS_POPUP используется WS_CHILD или WS_OVERLAPPED, то этого также не происходит ...

Может кто-нибудь объяснить, почему, когда я создаю окно WS_POPUP со стилем WS_EX_LAYERED, все нижние окна не обновляются, и если я добавляю стиль WS_EX_TRANSPARENT, это прекрасно работает.

Примечание: почему я не использую стиль WS_EX_TRANSPARENT, если он работает правильно? если я использую его, мое окно не может быть перетащено, и мне нужно это сделать :))

Обновлено: альтернативный текст http://img17.imageshack.us/img17/586/clipboard01il.jpg

Изображение выше, чтобы лучше описать происходящее: Первая часть изображения, которую вы можете видеть в моем многослойном окне, а внизу - vs, во второй - я нажимаю кнопку запуска, а затем на последнем изображении я уже перетаскиваю свое многослойное окно вправо, и вы можете видеть, что окно vs не обновляет уязвимую область. Обратите внимание, что эта ситуация до сих пор происходит только со стартовым окном ?! с другими окнами этого не происходит!? ...

Спасибо

1 Ответ

0 голосов
/ 17 мая 2010

только в области окна запуска, которое появляется над моим окном

Это ожидается. Только этот прямоугольник отсечения скрыт меню «Пуск», поэтому будет перекрашен только этот регион. Какое поведение вы ожидаете? Если есть окна, покрытые окнами более высокого уровня, то они также не будут перекрашиваться - зачем перекрашивать что-то, чтобы просто закрасить его?

Все нижние окна должны быть перекрашены, хотя, если вы используете прозрачный, потому что GDI не может вычислить окончательный цвет пикселя, не зная области под цветом окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...