




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章
MFC菜單編程3.1菜單編程3.2菜單消息的傳輸機(jī)制3.3動(dòng)態(tài)菜單操作3.4小結(jié)主要內(nèi)容菜單分類菜單創(chuàng)建菜單加載與顯示響應(yīng)菜單命令更新菜單項(xiàng)菜單動(dòng)態(tài)編輯3.1菜單編程菜單分類:彈出式菜單下拉式菜單級(jí)聯(lián)菜單快捷菜單3.1.1創(chuàng)建菜單創(chuàng)建菜單步驟:(1)添加一個(gè)自定義的菜單資源;(2)用菜單編輯器設(shè)計(jì)菜單;(3)將菜單加入應(yīng)用程序;(4)為每個(gè)菜單命令添加消息映射。3.1.1創(chuàng)建菜單明確幾個(gè)點(diǎn)菜單ID命名:ID_頂層菜單名_下一級(jí)菜單名……快捷鍵,例Alt+k加速鍵,例Ctrl+k3.1.1創(chuàng)建菜單演示添加菜單資源,使用菜單編輯器編輯菜單。菜單命令項(xiàng)及其消息映射MFC程序可以處理兩種菜單消息:WM_COMMAND:為菜單命令消息;
菜單命令項(xiàng)消息映射宏格式是: ON_COMMAND(ID,消息響應(yīng)函數(shù)名)ON_COMMAND(ID_FILE_NEW,OnFileNew)UPDATE_COMMAND_UI:為菜單更新消息,處理菜單狀態(tài)的動(dòng)態(tài)變化。如希望根據(jù)程序的執(zhí)行狀態(tài),激活或禁用某些菜單項(xiàng),設(shè)置選中標(biāo)記,或更改菜單項(xiàng)文字等,菜單命令項(xiàng)及其消息映射用戶點(diǎn)擊菜單項(xiàng)后,會(huì)產(chǎn)生命令消息WM_COMMAND,消息的參數(shù)中會(huì)包含菜單項(xiàng)的ID號(hào),以區(qū)別點(diǎn)擊那個(gè)菜單項(xiàng)。命令消息可以映射到視圖、文檔、框架或者應(yīng)用程序類中。命令消息處理路徑:視圖類→文檔類→文檔模板類→框架窗口類→應(yīng)用程序類菜單命令項(xiàng)及其消息映射演示菜單的兩種消息響應(yīng)。尤其是UPDATE_COMMAND_UI消息響應(yīng),利用響應(yīng)函數(shù)中傳進(jìn)來(lái)的CCmdUI對(duì)象指針可完成設(shè)置菜單項(xiàng)可使用,不可使用,變灰,設(shè)置標(biāo)記菜單等操作。pCmdUI->Enable(false);//true和false來(lái)設(shè)置能否使用或變灰pCmdUI->SetCheck(true);//true和false來(lái)設(shè)置標(biāo)記pCmdUI->SetText(“cut”);//改變菜單項(xiàng)文本內(nèi)容菜單的相關(guān)重要函數(shù)1.CMenu*GetMenu();//得到菜單指針2.CMenu*GetSubMenu();//得到子菜單指針,也就是彈出菜單指針3.UINTCheckMenuItem(
);//將菜單項(xiàng)加上或去掉√(對(duì)號(hào))標(biāo)記a.如果第一個(gè)參數(shù)是ID號(hào),第二個(gè)參數(shù)必須是MF_BYCOMMAND|MF_CHECKED的組合b.如果第一個(gè)參數(shù)是索引號(hào),第二個(gè)參數(shù)必須是MF_BYPOSITION|MF_CHECKED的組合菜單的相關(guān)重要函數(shù)4.BOOLSetDefaultItem();//設(shè)置缺省菜單,也就是將菜單項(xiàng)粗體顯示a.如果第一個(gè)參數(shù)是索引號(hào),第二個(gè)參數(shù)必須是trueb.如果第一個(gè)參數(shù)是ID號(hào),第二個(gè)參數(shù)必須是false*注:一個(gè)子菜單最多只能有一個(gè)缺省菜單項(xiàng)5.BOOLSetMenuItemBitmaps(
);//設(shè)置位圖標(biāo)記,標(biāo)記大小為13*13像素a.如果第一個(gè)參數(shù)是ID號(hào),第二個(gè)參數(shù)必須是MF_BYCOMMANDb.如果第一個(gè)參數(shù)是索引號(hào),第二個(gè)參數(shù)必須是MF_BYPOSITION第三個(gè)參數(shù)是沒(méi)有選中時(shí)的位圖;第四個(gè)參數(shù)是標(biāo)記時(shí)的位圖菜單的相關(guān)重要函數(shù)6.UINTEnableMenuItem();//使菜單項(xiàng)有效,無(wú)效,或變灰a.如果第一個(gè)參數(shù)是ID號(hào),第二個(gè)參數(shù)必須是MF_BYCOMMAND和有效,無(wú)效,或變灰的組合b.如果第一個(gè)參數(shù)是索引號(hào),第二個(gè)參數(shù)必須是MF_BYPOSITION和有效,無(wú)效,或變灰的組合*注:若讓此函數(shù)生效,必須在CMainFrame構(gòu)造函數(shù)中添加:m_bAutoMenuEnable=false。菜單的相關(guān)重要函數(shù)7.BOOLSetMenu(CMenu*pMenu);//在當(dāng)前窗口上設(shè)置新菜單或移除菜單。如果參數(shù)為0,則是移除菜單。自己創(chuàng)建菜單{CMenumenu;menu.LoadMenu(IDR_MENU1);SetMenu(&menu);menu.Detach();}8.HMENUDetach();//如果將CMenu對(duì)象設(shè)置為局部對(duì)象,使用Detach()從menu對(duì)象中分離窗口菜單句柄,從而當(dāng)menu對(duì)象析構(gòu)的時(shí)候窗口菜單資源不隨之銷毀。菜單的相關(guān)操作的實(shí)現(xiàn)方法
a.添加對(duì)號(hào)標(biāo)記:方法一:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);//通過(guò)索引方法二:GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);//通過(guò)IDb.設(shè)置缺省菜單項(xiàng):每個(gè)子菜單最多只能有一個(gè)缺省菜單項(xiàng)方法一:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,true);//通過(guò)索引方法二:GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,false);//通過(guò)ID菜單的相關(guān)操作的實(shí)現(xiàn)方法
c.添加圖形標(biāo)記:方法一:通過(guò)IDCBitmapbitmap;//必須設(shè)置為全局對(duì)象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_NEW,MF_BYCOMMAND,&bitmap,&bitmap);方法二:通過(guò)索引CBitmapbitmap;//必須設(shè)置為全局對(duì)象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);菜單的相關(guān)操作的實(shí)現(xiàn)方法d.使菜單無(wú)效,變灰//必須在構(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)獲得位圖標(biāo)記的大?。篊Stringstr;str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));MessageBox(str);3.3動(dòng)態(tài)地創(chuàng)建菜單
動(dòng)態(tài)地創(chuàng)建菜單可以使系統(tǒng)資源更加節(jié)省,在應(yīng)用程序中動(dòng)態(tài)創(chuàng)建菜單分兩個(gè)步驟:1.調(diào)用函數(shù)創(chuàng)建空的彈出式菜單BOOLCreateMenu()BOOLCreatePopupMenu()2.調(diào)用函數(shù)AppendMenu或InsertMenu在該菜單中加入菜單項(xiàng)。3.增加菜單項(xiàng)
在菜單的尾部增加菜單項(xiàng)
BOOLAppendMenu(UINTdwFlags, //新加入的菜單項(xiàng)類型標(biāo)識(shí) UINTdwIDNewItem, //新加入菜單項(xiàng)的ID LPCTSTRlpNewItem //新加入的菜單項(xiàng)內(nèi)容)
nFlags:MF_POPUP(彈出菜單);MF_SEPARATOR(分隔欄);MF_STRING(字符串)nIDNewItem:如果第一個(gè)參數(shù)為彈出菜單,則第二個(gè)參數(shù)為新菜單句柄;如果第一個(gè)參數(shù)為分隔欄,則第二個(gè)參數(shù)就忽略了lpszNewItem:菜單名稱例如在“文件”菜單的末尾增加一項(xiàng)“關(guān)于”:AppendMenu(MF_STRING,201,“關(guān)于(&A)“);
(2)在菜單中插入菜單項(xiàng)
調(diào)用函數(shù)InsertMenu在菜單中插入新的菜單BOOLInsertMenu(UINTwPosition, //指定新菜單項(xiàng)插入的位置UINTdwFlag, //新加入的菜單項(xiàng)的信息UINTdwIDNweItem, //新加入的菜單項(xiàng)的標(biāo)識(shí)LPCTSTRlpNewItem //新插入的菜單項(xiàng)的內(nèi)容)
例如,在“文件”菜單的“退出”項(xiàng)之前加入“打印”菜單項(xiàng);InsertMenu(2,MF_BYPOSITION|MF_STRING,IDM_PRINT,"打?。?P)");4.刪除菜單項(xiàng)調(diào)用函數(shù)DeleteMenu刪除菜單項(xiàng):
BOOLDeleteMenu(
UINTwPosition,//要?jiǎng)h除的菜單項(xiàng)的位置UINTdwFlag //對(duì)wPosition的解釋)
例如,刪除“文件”菜單中的“另存為”菜單項(xiàng):DeleteMenu(IDM_SAVEAS,MF_BYCOMMAND)動(dòng)態(tài)添加
CMenumenu; menu.CreatePopupMenu();//將這個(gè)彈出菜單模型裝到總的菜單模型中 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);//刪除菜單項(xiàng) menu.Detach();//右鍵單擊彈出菜單
(TrackPopupMenu)1)添加菜單資源(ID為IDR_MENU1)2)在view類中添加右鍵消息處理{ CMenumenu; menu.LoadMenu(IDR_MENU_COLOR); CMenu*p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年高考物理一輪復(fù)習(xí):重力、彈力、摩擦力(試卷+答案解析)
- 山西省運(yùn)城市2020-2021學(xué)年高一下學(xué)期期中調(diào)研測(cè)試歷史試卷
- 辦公室日常安全知識(shí)培訓(xùn)課件
- 能源行業(yè)2025年CCS項(xiàng)目經(jīng)濟(jì)效益與產(chǎn)業(yè)政策創(chuàng)新路徑創(chuàng)新優(yōu)化研究
- 短視頻內(nèi)容監(jiān)管2025年政策導(dǎo)向與社會(huì)責(zé)任履行路徑報(bào)告
- 社區(qū)心理健康服務(wù)在社區(qū)心理危機(jī)干預(yù)中的實(shí)踐報(bào)告
- 國(guó)內(nèi)航行海船法定檢驗(yàn)技術(shù)規(guī)則第3篇 載重線
- 勸學(xué)荀子課件公開(kāi)課
- 剖宮產(chǎn)與順產(chǎn)區(qū)別課件
- 刺繡英語(yǔ)基礎(chǔ)知識(shí)培訓(xùn)課件
- 中亞俄羅斯車站代碼查詢表
- NB/T 11130-2023煤礦井下自動(dòng)控制鉆機(jī)
- 常見(jiàn)心律失常的診斷和處理
- RBA社會(huì)責(zé)任商業(yè)聯(lián)盟準(zhǔn)則(管理手冊(cè)+程序+記錄+培訓(xùn))
- 潤(rùn)新控制閥說(shuō)明書
- GB/T 18742.1-2017冷熱水用聚丙烯管道系統(tǒng)第1部分:總則
- 七七事變盧溝橋事變ppt模板
- 護(hù)理文書書寫規(guī)范-課件
- 安全技術(shù)交底簽字表格【范本模板】
- 工程質(zhì)保期滿驗(yàn)收?qǐng)?bào)告模板
- 2022-2023年(備考資料)主任醫(yī)師(正高)-耳鼻咽喉科學(xué)(正高)考試測(cè)驗(yàn)?zāi)芰Π胃哂?xùn)練一(帶答案)6
評(píng)論
0/150
提交評(píng)論