原创 Visual C++ 菜单

2011-12-12 11:19 2767 26 26 分类: MCU/ 嵌入式

2.1 如何动态添加和删除菜单项

  1. AppendMenu
  2. InsertMenu
  3. DeleteMenu
<pre class="code"> ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers void CMainFrame::OnAppendMenu() { //获得主菜单 CMenu* pMenu = GetMenu(); //获得子菜单 CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 4) { //在菜单末端添加菜单项 pSubMenu->AppendMenu(MF_STRING, ID_TEST_MENU, _T("新菜单项")); //重画菜单 DrawMenuBar(); } } void CMainFrame::OnInsertMenu() { //获得主菜单 CMenu* pMenu = GetMenu(); //获得子菜单 CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 4) { //在菜单指定位置添加菜单项 pSubMenu->InsertMenu(4, MF_BYPOSITION, ID_TEST_MENU, _T("新菜单项")); //重画菜单 DrawMenuBar(); } } void CMainFrame::OnRemoveMenu() { //获得主菜单 CMenu* pMenu = GetMenu(); //获得子菜单 CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 5) { //删除菜单项 pSubMenu->RemoveMenu(4, MF_BYPOSITION); //重画菜单 DrawMenuBar(); } } void CMainFrame::OnDeleteMenu() { //获得主菜单 CMenu* pMenu = GetMenu(); //获得子菜单 CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 5) { //删除菜单项 pSubMenu->DeleteMenu(4, MF_BYPOSITION); //重画菜单 DrawMenuBar(); } } void CMainFrame::OnTestMenu() { AfxMessageBox(_T("测试菜单项命令")); } </pre>

 

2.2 如何在系统菜单中添加菜单项

  1. GetSystemMenu
<pre class="code"> //获得系统菜单 CMenu* pMenu = GetSystemMenu(FALSE); //删除系统菜单项 pMenu->RemoveMenu(SC_MOVE, MF_STRING); //添加菜单项 pMenu->InsertMenu(0, MF_BYPOSITION, ID_TEST_MENU, _T("测试菜单项")); //重画菜单 DrawMenuBar(); </pre>

 

2.3 如何禁用关闭按钮

  1. EnableMenuItem
<pre class="code"> //获得系统菜单 CMenu* pMenu = GetSystemMenu(FALSE); //禁用关闭按钮 pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); </pre>

 

2.4 如何启用和禁用菜单项

CCmdUI的Enable方法

<pre class="code"> void CMainFrame::OnTestMenu1() { m_bEnable1 = FALSE; m_bEnable2 = TRUE; } void CMainFrame::OnUpdateTestMenu1(CCmdUI* pCmdUI) { //启用或禁用菜单1 pCmdUI->Enable(m_bEnable1); } void CMainFrame::OnTestMenu2() { m_bEnable1 = TRUE; m_bEnable2 = FALSE; } void CMainFrame::OnUpdateTestMenu2(CCmdUI* pCmdUI) { //启用或禁用菜单2 pCmdUI->Enable(m_bEnable2); } </pre>

2.5 如何设置菜单项的检查状态

SetCheck方法

<pre class="code"> void CMainFrame::OnUpdateTestMenu(CCmdUI* pCmdUI) { //设置菜单项检查状态 pCmdUI->SetCheck(m_nCheck); } </pre>

image

2.6 如何实现快捷菜单

即右键菜单ContextMenu

<pre class="code"> void CDemoView::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menu; //加载菜单 if (!menu.LoadMenu(IDR_MENU)) { return; } //获得子菜单 CMenu* pPopupMenu = menu.GetSubMenu(0); //弹出菜单 pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWnd); } void CDemoView::OnTestMenu1() { AfxMessageBox(_T("快捷菜单项1命令")); } void CDemoView::OnTestMenu2() { AfxMessageBox(_T("快捷菜单项2命令")); } </pre>

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
26
关闭 站长推荐上一条 /3 下一条