トップにウィンドウを持参I持ってそれに2つの2の窓があるWindowsプログラム:私はHWNDをダブルクリックするとのWin32:
hwnd (main interface)
hwnd2 (toplevel window, no parent, created by hwnd)
が、私はhwnd2がポップアップし、いくつかのデータを表示する必要があるので、私をトップにhwnd2もたらすために、この機能を使用します。
BringWindowToTop(hwnd2);
hwnd2トップに持っているが、奇妙一つのことがあります。もう一度hwnd2をクリックすると、hwnd(メインインターフェイス)が再び自動的にポップアップします。 この問題を解決するために、次の関数を使用しようとしましたが、それらの関数は機能しません。
SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
BringWindowToTop(hwnd2); //This is the function brings hwnd2 to top
SetForegroundWindow(hwnd2); //doesn't work
SetWindowPos(hwnd2, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
SetWindowPos(hwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
// hwnd2 "always" on top, not what I want
SetActiveWindow(hwnd2); // doesn't work too (for replying to Magnus Skog, thanks)
SwitchToThisWindow(hwnd2, TRUE);// got the same problem with BringWindowToTop function
SwitchToThisWindow(hwnd2, FALSE);
どうすればこの問題を解決できますか? ありがとうございます。
(それが戻って他のウィンドウの/前にあることができるので、それはトップレベルウィンドウにする必要があるので、AJに返信するために、hwnd2は親を持ちません)
(hwnd2がで構成されているメディアプレーヤーですいくつかのウィンドウ、ウィンドウの1つはビデオディスパッチ用、もう1つはプログレスバーとボリュームバー用のトラックバーコントロール、コントロールパネル用のツールバーコントロールです)
(これは、どのウィンドウをクリックしても問題ありませんhwnd2、hwndは、 "マウスがメニューバーとクライアント以外の領域を含めて、Z方向でhwndの上にある"とロンとして自動的にポップアップします)
(このメディアプレーヤーはDirect Showで書かれています。 IVideoWindow :: put_Ownerを使用してビデオウィンドウをビデオ所有者として配置し、Direct Showはビデオウィンドウの子としてサブビデオウィンドウを内部的に作成します。ソースコードを見ることができないこのサブビデオウィンドウを除いて、hwnd2で何か疑わしいものは見られません。)
ダイレクトショーが原因です。私はそれを実行するためにマルチスレッドを使用し、問題は解決されました。しかし、なぜ??
この問題は、(SendMessageではなく)PostMessageを使用して解決できます。
hwnd2に親がない理由は何ですか? hwndは作成時に親として設定できます。 –
hwnd2のマウスボタン操作コードではどうしますか?そこに何か魚がいる? –
それでは、PostMessageを使ってどのように解決しましたか? –