ポップアップメニュー表示時にダイアログを前面に出さないには

[戻る]
おみおみ 2005/03/07(月) 18:57:42
VC++.net MFC ダイアログベース

タスクトレイのアイコンからポップアップメニューを出す際、
SetForegroundWindow()をすることが推奨されているようなのですが、
そうするとダイアログが前面に出てきてしまいます。
もともと前面にある場合はいいのですが、他のアプリ等のウィンドウで隠れている場合にも
前面に出てきてしまいます。これを防ぐ方法はないでしょうか?
ちなみに他にダミーのダイアログを作ってShowWindow(SW_HIDE)で非表示にして、
そのダミーのダイアログをSetForegroundWindowの対象にしてみましたが、
他のダイアログが前面に出てきてしまいました。

今ソースがないのですが、明日にでも載せようと思います。
よろしくお願いします。

おみおみ 2005/03/11(金) 16:41:53
遅くなりましたが、ソースです。

WM_RBUTTONUPのとき、

 //メニュー表示
 //カーソルの現在位置を取得
 POINT point;
 ::GetCursorPos(&point);

 SetForegroundWindow();//←ここが問題
            
 VERIFY(menu.LoadMenu(IDR_MENU1));
 pPopup = menu.GetSubMenu(0);
 ASSERT(pPopup != NULL);

 pPopup->TrackPopupMenuEx(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y,  
this,NULL);

 PostMessage(WM_NULL);
            
----------------------

SetForegroundWindowをしないとポップアップメニューが消えなくなってしまうのですが、
この関数のせいで他のアプリ等のウィンドウで隠れている場合でも、
前面に出てきてしまいます。
分かる方いらっしゃらないでしょうか?

古いスレッドには追加発言できません。