0

子ウィンドウを含むウィンドウがあるという問題が発生しています。子ウィンドウには、Windows Media Player を使用してビデオを再生している別の子ウィンドウが含まれています。親ウィンドウで ShowWindow (hWnd, SW_HIDE) を呼び出してサーフェス全体をペイントしても、孫ウィンドウ (ビデオが再生されていた場所) が占める領域はオーバーライドされません。私はspy ++を使用しましたが、オーバーライドされていない領域は、再描画が発生する前に非表示に設定されていることがわかりました。

孫ウィンドウの hwnd を監視しましたが、WM_EraseBKGND または WM_NCPAINT メッセージを受信して​​いないようです。これは、それが占有していた領域が無効化されていなかったため、引き継ぎができなかったということですか? 私はwinformsが初めてです。

ありがとう!

4

1 に答える 1

1

非常に不明確ですが、親ウィンドウを非表示にすると何も表示されないと想定する必要があります。関連する可能性のあることの1つは、ビデオが常にハードウェアオーバーレイに表示されることです。これはビデオアダプタの機能であり、ビデオメモリのさまざまなチャンクをオーバーレイして合成画像を生成できます。したがって、そのビデオウィンドウを非表示にすると、実際にはオーバーラップしていないため、そのウィンドウの親は再描画メッセージを受け取りません。

Invalidate()メソッドを使用して、ウィンドウに強制的に再描画させます。可能であれば、P / Invoking ShowWindow()を避けてください。Visibleプロパティは常に適切な代替手段です。

于 2010-04-14T18:31:57.113 に答える