1 新建mfc单文档项目MenuTest
2 在Resource.h里面添加如下定义
#define ID_MENU_1 10000
#define ID_MENU_2 10001
#define ID_MENU_3 10002
#define ID_MENU_4 10003
#define ID_MENU_5 10004
3 修改显示的菜单
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CMenu *pFrameMenu = GetMenu();
if (pFrameMenu!=NULL)
{
CMenu* pNewPopMenu = new CMenu;
pNewPopMenu->CreatePopupMenu();
pNewPopMenu->AppendMenu(MF_STRING, ID_MENU_1, "本地磁盘(C:)");
pNewPopMenu->AppendMenu(MF_STRING, ID_MENU_2, "本地磁盘(D:)");
pFrameMenu->InsertMenuA(2, MF_BYPOSITION | MF_POPUP, (UINT)pNewPopMenu->m_hMenu, "我的电脑");
CMenu* pNewChildPopMenu = new CMenu;
pNewChildPopMenu->CreatePopupMenu();
pNewChildPopMenu->AppendMenuA(MF_STRING, ID_MENU_3, "VC++学习第一讲.txt");
pNewChildPopMenu->AppendMenuA(MF_STRING, ID_MENU_4, "VC++学习第二讲.txt");
pNewChildPopMenu->AppendMenuA(MF_STRING, ID_MENU_5, "VC++学习第三讲.txt");
pNewPopMenu->AppendMenuA(MF_POPUP, (UINT)pNewChildPopMenu->m_hMenu, "本地磁盘(E:)");
}
return 0;
}
4 在CMainFrame里面添加消息处理函数声明
afx_msg void OnCommandMenu1();
afx_msg void OnCommandMenu2();
afx_msg void OnCommandMenu3();
afx_msg void OnCommandMenu4();
5 添加菜单的消息映射
ON_COMMAND(ID_MENU_1, OnCommandMenu1)
ON_COMMAND(ID_MENU_2, OnCommandMenu2)
ON_COMMAND(ID_MENU_3, OnCommandMenu3)
ON_COMMAND(ID_MENU_4, OnCommandMenu4)
6 实现消息处理函数
void CMainFrame::OnCommandMenu1()
{
CString strMenuItem;
CMenu* pFrameMenu = GetMenu();
CMenu* pSubMenu2 = pFrameMenu->GetSubMenu(2);
pSubMenu2->GetMenuStringA(0, strMenuItem, MF_BYPOSITION | MF_STRING);
AfxMessageBox(strMenuItem);
}
void CMainFrame::OnCommandMenu2()
{
AfxMessageBox("本地磁盘(D:)");
}
void CMainFrame::OnCommandMenu3()
{
CString strMenuItem;
CMenu* pFrameMenu = GetMenu();
CMenu* pSubMainMenu = pFrameMenu->GetSubMenu(2);
CMenu* pSubMenu = pSubMainMenu->GetSubMenu(2);
pSubMenu->GetMenuStringA(0, strMenuItem, MF_BYPOSITION | MF_STRING);
AfxMessageBox(strMenuItem);
}
void CMainFrame::OnCommandMenu4()
{
AfxMessageBox("VC++学习第2讲.txt");
}