MFC中遍历所有菜单项
参考:
/***************************************************************
在OnInitDialog中,可以调用 InitMenu( GetMenu()),从配置文件中读取菜单项,或者调用 ExportMenu(GetMenu())导出菜单内容
- //加载菜单实现菜单的多语言切换
- void InitMenu( CMenu *menu )
- {
- if ( menu==NULL || ( !::IsMenu(menu->m_hMenu)))
- return ;
- CString szText;
- int nCount,subCount, id;
- nCount = menu->GetMenuItemCount(); //获取该层菜单数
- for(int i=0;i<nCount;i++) //遍历所有菜单项
- {
- //查看子菜单 如果有子菜单,返回0,否则返回子菜单项数目,如果是子菜单项,返回资源中的菜单COMMAND ID
- id= menu->GetMenuItemID(i);
- //获取菜单文字
- menu->GetMenuString (i, szText, MF_BYPOSITION);
- if ( szText!=_T(""))
- {
- //修改菜单文本
- menu->ModifyMenu(i, MF_BYPOSITION|MF_STRING,id, GetLanguageString( _T("MENU"), szText )); //GetLanguageString函数根据配置,返回菜单对应的中英文信息
- }
- if ( id==-1 )
- {
- subCount =menu->GetSubMenu(i)->GetMenuItemCount();
- if ( subCount>0 )
- InitMenu( menu->GetSubMenu(i));
- }
- }
- }
- //将所有的菜单文本导出
- void ExportMenu(CMenu*menu, int iDlgID )
- {
- if ( menu==NULL || ( !::IsMenu(menu->m_hMenu)))
- return ;
- CString szText, szSection, szKeyName, szKeyValue;
- int nCount,subCount, id;
- szSection.Format(_T("DLG_%d"),iDlgID);
- nCount= menu->GetMenuItemCount(); //获取该层菜单数
- for(int i=0;i<nCount;i++ ) //遍历所有菜单项
- {
- menu->GetMenuString (i, szText, MF_BYPOSITION);//获取菜单文字
- if ( szText!=_T(""))
- {
- //导出到配置文件中
- szKeyName.Format(_T("MENU_%s"),szText);
- szKeyValue.Format(_T("%s"),szText);
- g_CEIniFile.CEWriteIniFile(szSection,szKeyName,szKeyValue);
- }
- //查看是否有子菜单项
- id= menu->GetMenuItemID(i);
- if ( id==-1 )
- {
- subCount =menu->GetSubMenu(i)->GetMenuItemCount();
- if ( subCount>0 )
- ExportMenu( menu->GetSubMenu(i), iDlgID);
- }
- }
- }
*************************************************************/
1.菜单上添加一个菜单子项【显示ID】;添加一个菜单子项【唉】
其响应函数:
void CMyView::OnMenu()
{
CMenu *menu1;
menu1=AfxGetMainWnd()->GetMenu();
yymenu(menu1);
}
void CMyView::yymenu(CMenu * menu)
{
int nCount,id,subCount; CString temp;
nCount=menu->GetMenuItemCount();
for (int i=0;i<nCount;i++)
{
menu->GetMenuString(i,temp,MF_BYPOSITION);
if (temp==_T("唉"))
{
int k;
k=menu->GetMenuItemID(i);
CString a;
a.Format("%d",k);
MessageBox(a);
}
id=menu->GetMenuItemID(i);
if (id==-1)
{
subCount=menu->GetSubMenu(i)->GetMenuItemCount();
if (subCount>0)
{
yymenu(menu->GetSubMenu(i));
}
}
}
}
声明CMeun *menu;
OK!(*^__^*) ~
菜单句柄获取的好幸苦!
改进:指针前家P。