Проблема рисования: ShowWindow (hWnd, SW_HIDE) автоматически делает недействительными прямоугольники? - PullRequest
0 голосов
/ 14 апреля 2010

Я столкнулся с проблемой, когда у меня есть окно, которое содержит дочернее окно. Дочернее окно содержит другое дочернее окно, в котором воспроизводится видео с помощью Windows Media Player. Всякий раз, когда я вызываю ShowWindow (hWnd, SW_HIDE) в родительском окне и закрашиваю всю поверхность, область, занятая окном большого потомка (где воспроизводилось видео), не переопределяется. Я использовал spy ++ и обнаружил, что та область, которая не была переопределена, была установлена ​​как скрытая ДО перерисовки.

Я контролировал hwnd окна grand-child, и оно, похоже, не получало никаких сообщений WM_EraseBKGND или WM_NCPAINT. Означает ли это, что занимаемая им территория не была признана недействительной и поэтому не может быть перенесена? Я новичок в winforms.

Спасибо!

1 Ответ

1 голос
/ 14 апреля 2010

Очень неясно, я должен предположить, что когда вы прячете родительское окно, тогда ничего не будет видно. Одна вещь, которая может иметь значение, заключается в том, что видео всегда отображается в аппаратном наложении. Это особенность видеоадаптера, он может накладывать различные фрагменты видеопамяти для получения составного изображения. Соответственно, если вы скрываете это видеоокно, родительское окно этого окна не получит сообщение о перерисовке, поскольку оно фактически не перекрывалось.

Используйте метод Invalidate (), чтобы заставить окна перекрашиваться. Избегайте P / Invoking ShowWindow (), если можете, свойство Visible всегда является хорошей альтернативой.

...