CMenu::SetDefaultItem() では,サブメニューに設定できない
CMenu menu ;
CMenu* pPopup = menu.GetSubMenu(0);
pPopup->SetDefaultItem(defaultID) ;
…
pPopup->TrackPopupMenu(flags,point.x,point.y,AfxGetMainWnd()) ;
上のコードでは,トップレベルのコマンドには可能だが,そのサブメニューには対応できない.
以下の様に順に辿っていく必要がある
//*******************************************************************************
// 関数名 :既定のメニューの設定
// 作成日 :’09/11/12
//*******************************************************************************
inline BOOL MenuMod::SetDefaultItem (CMenu* menu,const UINT defaultID)
{
if (menu == NULL) { return FALSE ; }
int menuCount = menu->GetMenuItemCount() ;
for (int index=menuCount-1 ; 0<=index ; index–) {
UINT menuItemID = menu->GetMenuItemID(index) ;
if (ID_SEPARATOR ==menuItemID) { continue ; } // SEPARATOR
if (menuItemID == defaultID) {
return menu->SetDefaultItem(index,TRUE) ;
}
CMenu* subMenu = menu->GetSubMenu(index) ;
if (subMenu != NULL) {
MenuMod::SetDefaultItem(subMenu,defaultID) ;
}
}
return FALSE ;
}