码迷,mamicode.com
首页 > 编程语言 > 详细

VC++菜单

时间:2015-04-01 13:00:39      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

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

  1. AppendMenu
  2. InsertMenu
  3. DeleteMenu
/////////////////////////////////////////////////////////////////////////////
// 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("测试菜单项命令"));    
}

 

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

  1. GetSystemMenu
//获得系统菜单
CMenu* pMenu = GetSystemMenu(FALSE);

//删除系统菜单项
pMenu->RemoveMenu(SC_MOVE, MF_STRING);

//添加菜单项
pMenu->InsertMenu(0, MF_BYPOSITION, ID_TEST_MENU, _T("测试菜单项"));

//重画菜单
DrawMenuBar();

 

2.3 如何禁用关闭按钮

  1. EnableMenuItem
//获得系统菜单
CMenu* pMenu = GetSystemMenu(FALSE);

//禁用关闭按钮
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

 

2.4 如何启用和禁用菜单项

CCmdUI的Enable方法

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);
}

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

SetCheck方法

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

技术分享

2.6 如何实现快捷菜单

即右键菜单ContextMenu

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命令"));
}

VC++菜单

标签:

原文地址:http://www.cnblogs.com/liangxiaofeng/p/4383258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!