いつもお世話になっております。
現在、オプション設定時にシステムメニューの構成を
それにあわせて変更する処理を作っております。
まず以下のようなメニュー構成になっており
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_E
*************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_G(※)
Menu_E
*************************************************
とMenu_Gを追加するのには
CWnd* pMainWnd = AfxGetMainWnd();
CMenu* pMenu = pMainWnd->GetMenu();
pMenu->InsertMenu(Menu_EのID, MF_BYCOMMAND, Menu_GのID, "Menu_G");
pWnd->DrawMenuBar();
*************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_c(※)
Menu_E Menu_b
*************************************************
とMenu_Cを追加するのには
CWnd* pMainWnd = AfxGetMainWnd();
CMenu* pMenu = pMainWnd->GetMenu();
pMenu->InsertMenu(Menu_bのID, MF_BYCOMMAND, Menu_cのID, "Menu_c");
pWnd->DrawMenuBar();
と言うように記述し思ったように変更できました。
今わからなくて困っているのは
*************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_E Menu_c(※)
*************************************************
と言うように、Menu1−Menu_Cの最後にMenu_cを追加する場合と
*************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_E
Menu_G−Menu_c(※)
Menu_d(※)
*************************************************
と言うようにMenu_1の最後にMenu_Gを作成しその中に
Menu_c、Menu_dを追加する場合はどのようにすればいいのでしょうか。
どなたかアドバイスいただけないでしょうか。
自己レスになってしまいますが、色々調べて試験したところ
問題のひとつが解決しましたので報告します。
*****************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_E Menu_c(※)
*****************************************************
と言うように、Menu1−Menu_Cの最後にMenu_cを追加する場合ですが
CMenu* pMenu = pMainWnd->GetMenu(); //メニュー全体の取得
CMenu* pSubMenu_1 = pMenu->GetSubMenu(1); //Menu1の取得
CMenu* pInvSubMenu = pSubMenu_1->GetSubMenu(0); //Menu_Cの取得
//Menu_Cの最後にMenu_cの追加
pInvSubMenu->InsertMenu(-1, MF_BYPOSITION, Menu_CのID, "Menu_c");
と記述することにより解決しました。
残す問題は
*****************************************************
Menu0 Menu1 Menu2
∟Menu_A ∟Menu_C−Menu_a ∟Menu_F
Menu_B Menu_D Menu_b
Menu_E
Menu_G−Menu_c(※)
Menu_d
*****************************************************
Menu1内に新規にサブメニューを持つMenu_Gを作ることです。
今回上記で記述したものを使用すればMenu_G内にMenu_c、Menu_dを
作成することが可能だと思うのですが、
ポップアップのステータスを持つMenu_Gはどのようにつくればいいのでしょうか?
>ポップアップのステータスを持つMenu_Gはどのようにつくればいいのでしょうか?
そのまま。CreatePopupMenu()で作って、InsertMenu()で追加する。
MFCで書いているのなら、MSDNでCMenuのクラスメンバを見ればよい。
激しく図が見にくいんで勘ですけど…
> ポップアップのステータスを持つMenu_Gはどのようにつくればいいのでしょうか
これは、Menu_G 自体がポップアップメニュー(右クリックメニューみたいなの)ではなく、メインウィンドウのメニューバーに属し、サブメニューを持つもの、という理解でよろしいでしょうか。
CMenu::AppendMenu や CMenu::InsertMenu ならば nIDNewItem 引数、CMenu::InsertMenuItem ならばMENUITEMINFO 構造体の hSubMenu メンバあたりに注目してみてください。
ツイート | ![]() |