zoukankan      html  css  js  c++  java
  • VC++菜单

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

    image

    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命令"));
    }
  • 相关阅读:
    0180 定时器 之 setInterval() :开启定时器,京东倒计时案例,停止定时器,发送短信倒计时案例
    0179 定时器 之 setTimeout() :开启定时器,5秒后关闭广告案例,停止定时器
    json常用的注解
    Base64 编码与解码详解
    API 交互中怎么做好图片验证码?
    CSS中cursor 鼠标指针光标样式(形状)
    本地数据存储解决方案以及cookie的坑
    base64原理浅析
    Web前端十种常用的技术
    FreeMarker网页静态化
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/4383258.html
Copyright © 2011-2022 走看看