2012-03-02 11 views
1

ビデオを表示する非フルスクリーンのDirectXウィンドウがあります。アプリケーション目的のために、動き回り、時にはプログラムによって隠れている/目に見えるものから移動する必要があります。 隠されている状態から目に見える状態になると、ウィンドウが表示される前に新しい位置にウィンドウを移動する必要が生じることがあります。隠された状態から目に見える状態に移行するときに、ウィンドウが最後に表示された位置で一時的に再表示されるのを止めるにはどうしたらいいですか?

私はShowWindow(hWnd, SW_HIDE)でウィンドウを非表示にします。 新しい位置に新しいウィンドウを表示したいときは、最初にSetWindowPosで新しい座標とSWP_NOREDRAWSWP_NOZORDERフラグを使って移動します(私はZオーダーを混乱させたくありません)。

次に、新しい位置にウィンドウが表示されるようにShowWindow(hWnd, SW_SHOW)を呼び出します。これは、新しい正しい位置に表示される前に最後に表示された位置に一時的に表示されるウィンドウを除いて、正常に機能します。

MoveWindow(repaint-optionをfalseに設定)とGetWindowPlacementSetWindowPlacement(適切なフラグ付き)を使用してみましたが、同じ結果が得られました。

非表示から表示に切り替えるときにウィンドウを正しい位置に表示させるにはどうすればよいですか?

+0

もっとお試しください。 'SetWindowPlacement'が動作するはずです。最悪の場合(動作しない場合)、私は、ウィンドウを画面の外に移動して表示を設定してから、画面上に移動することをお勧めします。 –

+0

実際にウィンドウ枠ではなくビデオオーバーレイが表示されますか? –

+0

@ Cheersandhth.-Alf:表示/非表示の有無にかかわらず、ウィンドウを画面外に移動しようとしましたが、動作しませんでした。 HansPassant:あなたが何を意味するのか正確には分かりません。私が見るのは、ウィンドウが非表示になる前に最後に表示されたビデオフレームです。ウィンドウ自体には境界線、コントロール、ボタンなどはなく、ビデオのみです。 この時点で、DirectXがウィンドウの表示/非表示をどのように処理するかについて、DirectXに関連していることが最善の策です。 – dwaffy

答えて

0

Windows APIまたはDirectXのいずれかの障害ではなく、デコーダの処理方法に問題があることがわかりました。 ウィンドウの配置と可視状態は、ビデオデコーダを通過したフレームユーザデータの値に基づいています。デコーダが入力データの受信を停止したとき、エンコーダへのネットワーク接続が切断されたときに発生し、デコードされたフレームのコールバックを停止します。入力データがデコーダに再び到着すると、それはもはや有効ではなかったユーザデータと共に、「スタック」フレームのいくつかを吐き出す。

関連する問題