<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC 單文檔中動態添加菜單項和響應菜單事件

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    新建一個單文檔程序

    在查看菜單項中增加兩個子菜單,分別為隱藏工具欄(ID_HIDE),新建菜單(ID_NEWMENU)

    在Resource.h中增加一個ID_NEWMENU宏

    #define ID_NEWMENU        WM_USER+101

     

    操作工具欄和狀態欄

    使用GetDescendantWindow函數獲取工具欄和狀態欄的指針

    為ID_HIDE添加消息映射,編輯代碼如下

        static bool m_Hide=false;
        m_Hide=!m_Hide;
        //獲取工具欄指針
        CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR);
        //獲取狀態欄指針
        CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR);
        CMenu* pMenu=GetMenu();
        CMenu* pSubMenu=pMenu->GetSubMenu(2);
        if(m_Hide)
        {
            pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"顯示工具欄");
            if(pWndStatusBar!=NULL)    pWndStatusBar->SetWindowText("隱藏工具欄");
            if(pWndToolBar!=NULL)    pWndToolBar->ShowWindow(SW_HIDE);
        }
        else
        {
            pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"隱藏工具欄");
            if(pWndStatusBar!=NULL)    pWndStatusBar->SetWindowText("顯示工具欄");
            if(pWndToolBar!=NULL)    pWndToolBar->ShowWindow(SW_SHOW);
        }

     

    動態添加子菜單

    為ID_NEWMENU增加消息映射,編輯代碼如下

        static UINT m_NewMenu=ID_NEWMENU+1;
        //獲取菜單
        CMenu* pMenu=GetMenu();
        //獲取索引為2的菜單項,即第3列菜單
        CMenu* pSubMenu=pMenu->GetSubMenu(2);
        char buffer[1];
        itoa(m_NewMenu-ID_NEWMENU,buffer,10);
        if(m_NewMenu<=ID_NEWMENU+5)
        {
            pSubMenu->AppendMenu(MF_SEPARATOR); //分隔線
            pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++,
                                        CString("新的菜單 ")+buffer);    
        }
        //如果m_bAutoMenuEnable為true,則會依次檢查View、Document、Frame的
        //消息映射表是否有這個彈出菜單中每個菜單項的處理函數,如果沒有就會把那一項改為灰的   
        m_bAutoMenuEnable=false;

     

    添加OnCommand的消息映射用來響應添加的子菜單項,代碼如下

    UINT uMsg=LOWORD(wParam);
        for(UINT i=ID_NEWMENU+1;i<=ID_NEWMENU+5;i++)
            if(uMsg==i)
            {
                char buffer[1];
                itoa(i-ID_NEWMENU,buffer,10);
                MessageBox(CString("新的菜單 ") + buffer);
            }

     

    右鍵菜單

    在View類中添加OnRButtonDown的消息映射,代碼如下

        CMenu pPopMenu;
        pPopMenu.CreatePopupMenu();
        if(pPopMenu==NULL);
        pPopMenu.AppendMenu(MF_STRING,ID_NEWMENU+6,"右鍵菜單");
        this->ClientToScreen(&point);
        pPopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

     

    在View類中添加OnCommand的消息映射用來響應右鍵菜單的事件

    UINT uMsg=LOWORD(wParam);
        if(uMsg==ID_NEWMENU+6)
            MessageBox(CString("右鍵菜單"));
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全