5

WIn 32 プログラミングが行われているレガシー コードがあります。

ここには、右クリックするとメニューが起動するトレイ アイコンがあります。

ただし、フォーカス領域の外をクリックしても、メニューは保持されます。

他の場所でマウスをクリックしたときにメニューを閉じるにはどうすればよいですか?

Qt のようなフレームワークはそれを十分に管理します。マウス ポインターを追跡し、クリックをキャプチャして、メニュー領域の外にあるかどうかを確認する必要がありますか?

コードはレガシー C であり、オブジェクト指向の概念は使用されていません。そのため、ここで何かをオーバーライドすることはできません。

よろしくお願いします。

4

1 に答える 1

10

TrackPopupMenu関数のドキュメントの下部にあるコメントを読んでください: http://msdn.microsoft.com/en-us/library/windows/desktop/ms648002(v=vs.85).aspx

具体的には:

通知アイコンのコンテキスト メニューを表示するには、アプリケーションが TrackPopupMenu または TrackPopupMenuEx を呼び出す前に、現在のウィンドウがフォアグラウンド ウィンドウである必要があります。そうしないと、ユーザーがメニューまたはメニューを作成したウィンドウ (表示されている場合) の外側をクリックしても、メニューは消えません。現在のウィンドウが子ウィンドウの場合、(トップレベルの) 親ウィンドウを前景ウィンドウとして設定する必要があります。

于 2013-03-19T08:30:51.700 に答える