版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章
MFC菜單編程3.1菜單編程3.2菜單消息的傳輸機制3.3動態(tài)菜單操作3.4小結(jié)主要內(nèi)容菜單分類菜單創(chuàng)建菜單加載與顯示響應(yīng)菜單命令更新菜單項菜單動態(tài)編輯3.1菜單編程菜單分類:彈出式菜單下拉式菜單級聯(lián)菜單快捷菜單3.1.1創(chuàng)建菜單創(chuàng)建菜單步驟:(1)添加一個自定義的菜單資源;(2)用菜單編輯器設(shè)計菜單;(3)將菜單加入應(yīng)用程序;(4)為每個菜單命令添加消息映射。3.1.1創(chuàng)建菜單明確幾個點菜單ID命名:ID_頂層菜單名_下一級菜單名……快捷鍵,例Alt+k加速鍵,例Ctrl+k3.1.1創(chuàng)建菜單演示添加菜單資源,使用菜單編輯器編輯菜單。菜單命令項及其消息映射MFC程序可以處理兩種菜單消息:WM_COMMAND:為菜單命令消息;
菜單命令項消息映射宏格式是: ON_COMMAND(ID,消息響應(yīng)函數(shù)名)ON_COMMAND(ID_FILE_NEW,OnFileNew)UPDATE_COMMAND_UI:為菜單更新消息,處理菜單狀態(tài)的動態(tài)變化。如希望根據(jù)程序的執(zhí)行狀態(tài),激活或禁用某些菜單項,設(shè)置選中標記,或更改菜單項文字等,菜單命令項及其消息映射用戶點擊菜單項后,會產(chǎn)生命令消息WM_COMMAND,消息的參數(shù)中會包含菜單項的ID號,以區(qū)別點擊那個菜單項。命令消息可以映射到視圖、文檔、框架或者應(yīng)用程序類中。命令消息處理路徑:視圖類→文檔類→文檔模板類→框架窗口類→應(yīng)用程序類菜單命令項及其消息映射演示菜單的兩種消息響應(yīng)。尤其是UPDATE_COMMAND_UI消息響應(yīng),利用響應(yīng)函數(shù)中傳進來的CCmdUI對象指針可完成設(shè)置菜單項可使用,不可使用,變灰,設(shè)置標記菜單等操作。pCmdUI->Enable(false);//true和false來設(shè)置能否使用或變灰pCmdUI->SetCheck(true);//true和false來設(shè)置標記pCmdUI->SetText(“cut”);//改變菜單項文本內(nèi)容菜單的相關(guān)重要函數(shù)1.CMenu*GetMenu();//得到菜單指針2.CMenu*GetSubMenu();//得到子菜單指針,也就是彈出菜單指針3.UINTCheckMenuItem(
);//將菜單項加上或去掉√(對號)標記a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMAND|MF_CHECKED的組合b.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION|MF_CHECKED的組合菜單的相關(guān)重要函數(shù)4.BOOLSetDefaultItem();//設(shè)置缺省菜單,也就是將菜單項粗體顯示a.如果第一個參數(shù)是索引號,第二個參數(shù)必須是trueb.如果第一個參數(shù)是ID號,第二個參數(shù)必須是false*注:一個子菜單最多只能有一個缺省菜單項5.BOOLSetMenuItemBitmaps(
);//設(shè)置位圖標記,標記大小為13*13像素a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMANDb.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION第三個參數(shù)是沒有選中時的位圖;第四個參數(shù)是標記時的位圖菜單的相關(guān)重要函數(shù)6.UINTEnableMenuItem();//使菜單項有效,無效,或變灰a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMAND和有效,無效,或變灰的組合b.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION和有效,無效,或變灰的組合*注:若讓此函數(shù)生效,必須在CMainFrame構(gòu)造函數(shù)中添加:m_bAutoMenuEnable=false。菜單的相關(guān)重要函數(shù)7.BOOLSetMenu(CMenu*pMenu);//在當前窗口上設(shè)置新菜單或移除菜單。如果參數(shù)為0,則是移除菜單。自己創(chuàng)建菜單{CMenumenu;menu.LoadMenu(IDR_MENU1);SetMenu(&menu);menu.Detach();}8.HMENUDetach();//如果將CMenu對象設(shè)置為局部對象,使用Detach()從menu對象中分離窗口菜單句柄,從而當menu對象析構(gòu)的時候窗口菜單資源不隨之銷毀。菜單的相關(guān)操作的實現(xiàn)方法
a.添加對號標記:方法一:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);//通過索引方法二:GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);//通過IDb.設(shè)置缺省菜單項:每個子菜單最多只能有一個缺省菜單項方法一:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,true);//通過索引方法二:GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,false);//通過ID菜單的相關(guān)操作的實現(xiàn)方法
c.添加圖形標記:方法一:通過IDCBitmapbitmap;//必須設(shè)置為全局對象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_NEW,MF_BYCOMMAND,&bitmap,&bitmap);方法二:通過索引CBitmapbitmap;//必須設(shè)置為全局對象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);菜單的相關(guān)操作的實現(xiàn)方法d.使菜單無效,變灰//必須在構(gòu)造函數(shù)中添加:m_bAutoMenuEnable=false;GetMenu()->GetSubMenu(0)->EnableMenuItem(ID_FILE_OPEN,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);e.移除菜單SetMenu(0);f.添加菜單CMenumenu;menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);menu.Detach();位圖大?。?3*13)系統(tǒng)獲得位圖標記的大?。篊Stringstr;str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));MessageBox(str);3.3動態(tài)地創(chuàng)建菜單
動態(tài)地創(chuàng)建菜單可以使系統(tǒng)資源更加節(jié)省,在應(yīng)用程序中動態(tài)創(chuàng)建菜單分兩個步驟:1.調(diào)用函數(shù)創(chuàng)建空的彈出式菜單BOOLCreateMenu()BOOLCreatePopupMenu()2.調(diào)用函數(shù)AppendMenu或InsertMenu在該菜單中加入菜單項。3.增加菜單項
在菜單的尾部增加菜單項
BOOLAppendMenu(UINTdwFlags, //新加入的菜單項類型標識 UINTdwIDNewItem, //新加入菜單項的ID LPCTSTRlpNewItem //新加入的菜單項內(nèi)容)
nFlags:MF_POPUP(彈出菜單);MF_SEPARATOR(分隔欄);MF_STRING(字符串)nIDNewItem:如果第一個參數(shù)為彈出菜單,則第二個參數(shù)為新菜單句柄;如果第一個參數(shù)為分隔欄,則第二個參數(shù)就忽略了lpszNewItem:菜單名稱例如在“文件”菜單的末尾增加一項“關(guān)于”:AppendMenu(MF_STRING,201,“關(guān)于(&A)“);
(2)在菜單中插入菜單項
調(diào)用函數(shù)InsertMenu在菜單中插入新的菜單BOOLInsertMenu(UINTwPosition, //指定新菜單項插入的位置UINTdwFlag, //新加入的菜單項的信息UINTdwIDNweItem, //新加入的菜單項的標識LPCTSTRlpNewItem //新插入的菜單項的內(nèi)容)
例如,在“文件”菜單的“退出”項之前加入“打印”菜單項;InsertMenu(2,MF_BYPOSITION|MF_STRING,IDM_PRINT,"打印(&P)");4.刪除菜單項調(diào)用函數(shù)DeleteMenu刪除菜單項:
BOOLDeleteMenu(
UINTwPosition,//要刪除的菜單項的位置UINTdwFlag //對wPosition的解釋)
例如,刪除“文件”菜單中的“另存為”菜單項:DeleteMenu(IDM_SAVEAS,MF_BYCOMMAND)動態(tài)添加
CMenumenu; menu.CreatePopupMenu();//將這個彈出菜單模型裝到總的菜單模型中 GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"pop");//在尾部添加彈出菜單 menu.AppendMenu(MF_STRING,201,"1"); menu.AppendMenu(MF_SEPARATOR);//添加分割線 GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,“插入popup菜單”);//插入菜單 //menu.DeleteMenu(0,MF_BYPOSITION);//刪除菜單項 menu.Detach();//右鍵單擊彈出菜單
(TrackPopupMenu)1)添加菜單資源(ID為IDR_MENU1)2)在view類中添加右鍵消息處理{ CMenumenu; menu.LoadMenu(IDR_MENU_COLOR); CMenu*p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國科學院高能物理研究所AI應(yīng)用工程師崗位招聘備考題庫帶答案詳解
- 2025年新蔡輔警招聘真題及答案
- 黑龍江公安警官職業(yè)學院《計算機基礎(chǔ)與C語言》2024-2025學年期末試卷(A卷)
- 黑龍江公安警官職業(yè)學院《日本文學選讀》2025 學年第二學期期末試卷
- 2025年湘科研究院招聘專業(yè)技術(shù)人員5名備考題庫有答案詳解
- php域名管理系統(tǒng)課程設(shè)計
- 2025中國農(nóng)業(yè)大學水利與土木工程學院科研助理招聘1人備考筆試試題及答案解析
- Android 貪吃蛇課程設(shè)計
- 2025年5G網(wǎng)絡(luò)覆蓋范圍擴大與物聯(lián)網(wǎng)應(yīng)用場景行業(yè)報告
- 《CBT 3701-1995船用齒輪泵修理技術(shù)要求》專題研究報告深度解讀
- 2024年通遼市城市發(fā)展(集團)有限公司招聘筆試沖刺題(帶答案解析)
- 【全球6G技術(shù)大會】:2023通感一體化系統(tǒng)架構(gòu)與關(guān)鍵技術(shù)白皮書
- 引流管置管的健康宣教
- 常用保護繼電器課件
- 《華為員工績效考核管理辦法》
- 撲克俱樂部商業(yè)計劃書
- 我的家鄉(xiāng)湖北孝感介紹
- 庫存物品報廢申請表
- 醫(yī)院新院區(qū)介紹湘雅醫(yī)院新醫(yī)療區(qū)介紹
- 新團員團課學習課件
- 心理健康教師年度考核個人總結(jié)5篇精選
評論
0/150
提交評論