Как я могу остановить кратковременное появление окна в его последней видимой позиции при переходе от скрытого к видимому? - PullRequest
1 голос
/ 02 марта 2012

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

Я скрываю окно с помощью ShowWindow(hWnd, SW_HIDE).Когда я хочу снова показать окно на новой позиции, я сначала перемещаю его с помощью SetWindowPos с использованием новых координат и флагов SWP_NOREDRAW и SWP_NOZORDER (я не хочу связываться с Z-порядком).

Затем я звоню ShowWindow(hWnd, SW_SHOW), чтобы окно появилось на новой позиции.Это прекрасно работает, за исключением того, что окно кратковременно появляется в том месте, где оно было в последний раз видимым, до того, как оно появляется в новой правильной позиции.

Я попытался использовать альтернативы MoveWindow (с repaint-option, установленным в false)и GetWindowPlacement вместе с SetWindowPlacement (с соответствующими флажками), но они дают одинаковый результат.

Как заставить окно появиться в правильном положении при переходе от скрытого к видимому?

1 Ответ

0 голосов
/ 10 марта 2012

Оказывается, проблема была не в Windows API или DirectX, а в хитрой ошибке в способе работы декодера. Размещение окна и его статус видимости основаны на значениях в пользовательских данных кадра, передаваемых через видеодекодер. Когда декодер прекратил прием входных данных, что происходило, когда сетевое соединение с кодером было разорвано, он также прекратил бы давать обратные вызовы для декодированных кадров с данными, все еще находящимися в «конвейере». Когда входные данные снова поступают в декодер, он выплевывает несколько «застрявших» кадров с пользовательскими данными, которые больше не действительны.

...