• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            [zz]MFC中菜單的應(yīng)用(注釋詳細)

              1 取消右鍵系統(tǒng)菜單

            PreCreateWindow函數(shù)中改變設(shè)置樣式:

            cs.style&=~WS_SYSMENU

            CREATESTRUCT的具體結(jié)構(gòu)如下:

             

            typedef struct tagCREATESTRUCT {
               LPVOID    lpCreateParams;
               HANDLE    hInstance;
            //當前實例句柄
               HMENU     hMenu;//菜單句柄
               HWND      hwndParent;//父窗口
               int       cy;//寬度
               int       cx;//高度
               int       y;//窗口位置坐標
               int       x;//窗口位置坐標
               LONG      style;//窗口樣式
               LPCSTR    lpszName;//標題
               LPCSTR    lpszClass;//窗口類名
               DWORD     dwExStyle;//窗口擴展樣式
            }
             CREATESTRUCT;

             

             

            2.在右鍵系統(tǒng)菜單加入菜單項:

            在窗口創(chuàng)建的時候加入

                CMenu *pMenu=GetSystemMenu(FALSE);//取得系統(tǒng)菜單
                CString StrMenuTitle="我的菜單";
                pMenu
            ->AppendMenu(MF_SEPARATOR);//增加一個項目到菜單的末尾,增加分割線
                pMenu->AppendMenu(MF_STRING,IDM_MYSYSTEM,StrMenuTitle);

            MSDN中的定義;

            BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
            BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, 
            const CBitmap* pBmp );

            NFlags:標志位,可以是, MF_OWNERDRAW, MF_STRING, MF_SEPARATOR, MF_POPUP

            NIDNewItem:菜單項目的ID,如果Nflags設(shè)置為MF_POPUP,那么就是子菜單的句柄,如果是MF_SEPARATOR,就突列.

            LpszNewItem:新菜單項的內(nèi)容

            PBmp:菜單項圖像對象,指向一個Cbitmap對象

            在系統(tǒng)菜單中增加了菜單項之后再增加消息處理函數(shù).發(fā)送的是系統(tǒng)消息,OnSysCommand函數(shù)中處理

            void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
            {
            if(nID==IDM_MYSYSTEM)
            {
                 MessageBox(
            "這是我的自定義系統(tǒng)菜單","信息提示",MB_OK);
            }

            CFrameWnd::OnSysCommand(nID, lParam);
            }

            3.動態(tài)的增加菜單項:

             

            pMenu->GetSubMenu(0)->AppendMenu(MF_SEPARATOR);//增加分割線
            pMenu->GetSubMenu(0)->AppendMenu(MF_STRING,ID_APP_ABOUT,"關(guān)于");//增加菜單項

            4.動態(tài)的刪除菜單項:

                CMenu *pMenu=AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
                
            for(int i=0;i<pMenu->GetMenuItemCount();i++)
                
            {
                    CString StrName;
                    pMenu
            ->GetMenuString(i,StrName,MF_BYPOSITION);
                    
            if(StrName.Find("保存",0)==0)
                    
            {
                        pMenu
            ->DeleteMenu(i,MF_BYPOSITION);
                        MessageBox(
            "刪除“文件/保存”菜單操作成功!請查看","信息提示",MB_OK);
                        
            break;
                    }

                }

            函數(shù)說明:

                int GetMenuString( UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags ) const;

            int GetMenuString( UINT nIDItem, CString& rString, UINT nFlags ) const;

            nIDItem:由標志位確定,可以是菜單項的ID或者偏移量

            lpStringrString:存放字符

            nMaxCount:最大長度

            nFlags;標志位,可以是MF_BYCOMMANDMF_BYPOSITION

            BOOL DeleteMenu( UINT nPosition, UINT nFlags );//刪除一個菜單項

            BOOL RemoveMenu( UINT nPosition, UINT nFlags );

            5.如何觸發(fā)系統(tǒng)菜單命令;

            AfxGetMainWnd()->SendMessage(WM_SYSCOMMAND,SC_CLOSE);

            6.如何創(chuàng)建一個彈出式菜單

                以右擊鼠標鍵為例:

                CMenu Menu;

                //創(chuàng)建一個彈出式菜單

                Menu.CreatePopupMenu();

                //添加一個菜單項

                Menu.AppendMenu(0, ID_POPUP_MENU1, "菜單項&");

                //添加一個左邊帶復(fù)選標志的菜單項

                Menu.AppendMenu(MF_CHECKED, ID_POPUP_MENU2, "菜單項&");

                //添加一個分隔條

                Menu.AppendMenu(MF_SEPARATOR, 0, "");

                //顯示一個灰色和無效的菜單項

                Menu.AppendMenu(MF_GRAYED, ID_POPUP_MENU3, "菜單項&");

                //添加一個左邊帶單選標志的菜單項

                Menu.AppendMenu(0, ID_POPUP_MENU4, "菜單項&");

                Menu.CheckMenuRadioItem(ID_POPUP_MENU3,ID_POPUP_MENU4,ID_POPUP_MENU4,MF_BYCOMMAND);

                //使菜單項為缺省菜單項,以黑體字顯示,并在用戶按回車時響應(yīng)

                ::SetMenuDefaultItem(Menu.m_hMenu,ID_POPUP_MENU4,MF_BYCOMMAND);

                //根據(jù)當前光標位置顯示菜單

                CPoint Pos;

                GetCursorPos(&Pos); //取得光標位置

                Menu.TrackPopupMenu(TPM_RIGHTBUTTON, Pos.x, Pos.y, this);//彈出菜單

                Menu.DestroyMenu();

                CView::OnRButtonDown(nFlags, point);

            函數(shù)說明:

            BOOL CreatePopupMenu( );//創(chuàng)建一個彈出式菜單

            BOOL CheckMenuRadioItem( UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags );

                NIDFirst:單選按鈕組的第一個項的ID或命令

                NIDLast:單選按鈕組的最或一個項的ID或命令

            NIDItem:單選標記的按鈕

            NFlags;標志位,MF_BYCOMMANDMF_BYPOSITION

            BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );//在指定的位置彈出菜單

            NFlagsTPM_CENTERALIGNTPM_LEFTALIGN TPM_RIGHTALIGNTPM_LEFTBUTTON TPM_RIGHTBUTTON

            PWnd:從菜單中接收WM_COMMAND消息

            LpRect:包含屏幕的矩形位置,如果用戶單擊,就取消彈出菜單的顯示,為NULL時,如果用戶單擊彈出菜單的其他部分,就取消顯示

            7.創(chuàng)建快捷菜單:

            重載窗口的OnContextMenu函數(shù),當鼠標右鍵單擊時觸發(fā)它,

            void C。。。。View::OnContextMenu(CWnd* pWnd, CPoint point)

            {

                CMenu Menu;

                if(Menu.LoadMenu(IDR_MAINFRAME))

                {

                    CMenu *pMenu=Menu.GetSubMenu(0);

                    pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd());

                }

            }

            8.取消應(yīng)用程序的菜單;

                CMenu *pMenu=GetMenu();

                pMenu->DestroyMenu();

                SetMenu(NULL);

            9.如何在菜單中添加位圖

                在應(yīng)用程序的視圖類中添加CBitmap類的對象,取名為bm_open1bm_open2。在視圖類的構(gòu)造函數(shù)中添加以下代碼:

            bm_open1.LoadBitmap(IDB_OPEN1)

            bm_open2.LoadBitmap(IDB_OPEN2)

            添加位圖到菜單

            CWnd*parent=GetParent()

            CMenu*pmenubar=parent->GetMenu()

            CMenu*pmenu=pmenubar->GetSubMenu(2)

            pmenu->SetMenuItemBitmaps(1MF_BYPOSITION&bm_open1&bm_open2)

            函數(shù)說明:

            BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked );

            相信看到函數(shù)原形就可以知道函數(shù)是什么意思

            posted on 2009-10-23 16:32 小默 閱讀(1856) 評論(0)  編輯 收藏 引用 所屬分類: Language

            導航

            統(tǒng)計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲精品99久久久久中文字幕| 亚洲国产精品成人久久| 国产精品热久久毛片| 久久国产成人亚洲精品影院| 香蕉久久久久久狠狠色| 久久精品一本到99热免费| 精品无码人妻久久久久久| 日日狠狠久久偷偷色综合96蜜桃| 亚洲AV日韩精品久久久久久| 99久久精品费精品国产| 狠狠综合久久综合88亚洲| 国产亚洲美女精品久久久| 少妇久久久久久被弄高潮| 免费一级做a爰片久久毛片潮| 久久成人国产精品| 日韩久久久久中文字幕人妻| 亚洲乱亚洲乱淫久久| 男女久久久国产一区二区三区| 久久精品亚洲福利| 四虎国产永久免费久久| 久久久无码人妻精品无码| 久久久久久免费视频| 久久免费大片| 久久www免费人成看国产片| 97久久天天综合色天天综合色hd| 东方aⅴ免费观看久久av | 免费久久人人爽人人爽av| 人人狠狠综合久久亚洲88| 9久久9久久精品| 91精品国产高清91久久久久久| 久久成人国产精品免费软件| 亚洲国产成人精品久久久国产成人一区二区三区综 | 99久久国产宗和精品1上映| 亚洲精品无码久久久久AV麻豆| 婷婷久久综合九色综合98| 青青青青久久精品国产| 蜜桃麻豆www久久| 爱做久久久久久| 久久丝袜精品中文字幕| 午夜精品久久久久久久无码| 久久天天婷婷五月俺也去|