4

ユーザーがnotifiyiconデータ(トレイアイコン)を右クリックしたときに、右クリックコンテキストメニュー/サブメニューをwin32アプリケーション(c ++)に追加したいと思います。シンプルな 1 レベル メニューを作成できますが、複数レベル メニューの例が見つかりません。

次のようなメニューを作成したいと思います。

Settings ->  Setting 1  -> Setting 2
                        -> Setting 3
         ->  Settings 4 -> Setting 5
                        -> Setting 6    
Exit 

私はこのコードでメニューを作成しています:

 HMENU hPopupMenu = CreatePopupMenu();
 InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, IDM_EXIT, L"Exit");
 SetForegroundWindow(hWnd);
 TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_RIGHTALIGN, p.x, p.y, 0, hWnd, NULL);

上記のコードは、notifyicondata メッセージ ハンドラー (WM_RBUTTONUP) 内に配置されます。

上記のコードを使用してサブメニューを作成するにはどうすればよいですか? 新しい HMENU を作成して親メニューに挿入しますか?

他に気になる点は、右クリック イベントがトリガーされると常にメニューが作成されるため、起動するたびに新しい HMENU が作成されることです。アプリケーションの起動時にメニュー (サブメニュー付き) を作成し、アプリケーションの終了時に破棄することはできますか? ウィンドウはメニューの破棄を処理しますか?

返信ありがとうございます。

4

1 に答える 1

4

サブメニューは、MF_POPUP フラグを使用して AppendMenu/InsertMenu を使用して、またはマスクに MIIM_SUBMENU を使用して InsertMenuItem を使用して、メニュー項目として挿入される別の HMENU (CreatePopupMenu() から) です。

アプリケーションの起動時にメニューを作成することを妨げるものは何もありませんが、メニューに大量のアイテムがあるか、アイテムの作成に大量の計算が必要でない限り、トレイ アイコン メッセージに応答してメニューを作成することに問題はありません。

自分で HMENU を破棄する必要があります ( SetMenu()で HWND にアタッチされている場合を除く)

于 2011-09-23T17:08:10.523 に答える