MFCにはCCommandBarクラスというのがあって
コマンドバーのAPIをカプセル化しています。
コマンドバーからメニューを取りたい時は
CCommandBar::GetMenu()メンバ関数で、HMENUがとれて、
CMenuを構築することでメニューにアクセスできます。
HMENU hmenu = m_wndCommandBar.GetMenu();
CMenu *pMenu= CMenu::FromHandle( hmenu );
CMenu *pSubMenu = pMenu->GetSubMenu(0);
これで、サブメニューにアクセスできます。
ただし、これは本物ではなく、コピーです。
ここで取れたpSubMenu->AppendMenu()しても実際のメニューに項目は追加されません。
こういう事がしたいときは、
HMENU hmenu = SHGetMenu( m_wndCommandBar.m_hCommandBar );
とやって、本物のHMENUを取りましょう。
ただし、これはなぜかPPCではNULLが帰ってきます。SPだと動いたのに。(おいらの環境だけかも)
実際に動いたのは、
#define SHGetSubMenu(hWndMB,ID_MENU) (HMENU)::SendMessage((hWndMB), SHCMBM_GETSUBMENU, (WPARAM)0, (LPARAM)ID_MENU);
HMENU hmenu = SHGetSubMenu( m_wndCommandBar.m_hCommandBar ,0 );
とやって、サブメニューを直接取得する方法だけでした。
SHGetSubMenu()もヘルプにはエントリがあるのに、なぜか定義されていない謎のマクロ。
まあ、動いたからよしとするか。
[10/7追記]上記方法では右が取れません。
こっちに書きました。
posted by Jiro at 20:37
|
Comment(0)
|
TrackBack(0)
|
開発Tips