Мерцающие проблемы пользовательского интерфейса - что заставляет DWM в Windows 7 принимать решение о немедленном обновлении после вызова SetWindowPos? - PullRequest
1 голос
/ 17 августа 2010

У меня есть пользовательский элемент управления стилем вкладок, и внутри он работает, показывая или скрывая соответствующую страницу при нажатии на вкладку.

Основной порядок действий, которые происходят при нажатии на вкладку,

  1. Вывести релевантную страницу вперед
  2. Показать релевантную страницу (вызвав SetWindowPos с соответствующими флагами)
  3. Скрыть старую страницу, которую мы только что закрыли
  4. Перекрасить окно

Некоторые из моих вкладок отображаются с помощью DirectX.Под Windows XP все работает нормально, и при переключении между вкладками мерцание отсутствует.Хотя в Windows 7 (или Vista) вызов SetWindowPos на шаге 2 перерисовывает окно, и перед шагом 4 появляется вспышка неинициализированных пикселей, обычно это было на рабочем столе до запуска моего приложения.

Этоэто происходит только со страницами DirectX, но я не уверен, что именно с DirectX может вызвать это, если что-нибудь - есть и другие различия между страницами, это был просто очевидный шаблон.Я не уверен, реальная ли это подсказка или красная сельдь.

Страницы GDI не перерисовываются до шага 4. Я прошел по коду и проверил - дело не только в том, что DWM правильно используеткэшированное растровое изображение на шаге 2 - оно действительно не перерисовывается вообще до шага 4.

Это справочная информация, но на данный момент я не уверен, как решить эту конкретную проблему, поэтому мой вопрос большеОбщее:

Что может повлиять на решение SetWindowPos перекрасить или нет?

...