版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第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)來的CCmdUI對(duì)象指針可完成設(shè)置菜單項(xiàng)可使用,不可使用,變灰,設(shè)置標(biāo)記菜單等操作。pCmdUI->Enable(false);//true和false來設(shè)置能否使用或變灰pCmdUI->SetCheck(true);//true和false來設(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ù)是沒有選中時(shí)的位圖;第四個(gè)參數(shù)是標(biāo)記時(shí)的位圖菜單的相關(guān)重要函數(shù)6.UINTEnableMenuItem();//使菜單項(xiàng)有效,無效,或變灰a.如果第一個(gè)參數(shù)是ID號(hào),第二個(gè)參數(shù)必須是MF_BYCOMMAND和有效,無效,或變灰的組合b.如果第一個(gè)參數(shù)是索引號(hào),第二個(gè)參數(shù)必須是MF_BYPOSITION和有效,無效,或變灰的組合*注:若讓此函數(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);//通過索引方法二:GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);//通過IDb.設(shè)置缺省菜單項(xiàng):每個(gè)子菜單最多只能有一個(gè)缺省菜單項(xiàng)方法一:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,true);//通過索引方法二:GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,false);//通過ID菜單的相關(guān)操作的實(shí)現(xiàn)方法
c.添加圖形標(biāo)記:方法一:通過IDCBitmapbitmap;//必須設(shè)置為全局對(duì)象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_NEW,MF_BYCOMMAND,&bitmap,&bitmap);方法二:通過索引CBitmapbitmap;//必須設(shè)置為全局對(duì)象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);菜單的相關(guān)操作的實(shí)現(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)獲得位圖標(biāo)記的大小:CStringstr;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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年自貢客運(yùn)資格證試題完整版
- 吉首大學(xué)《期貨與期權(quán)》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉首大學(xué)《非參數(shù)統(tǒng)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林藝術(shù)學(xué)院《造型基礎(chǔ)訓(xùn)練III》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林藝術(shù)學(xué)院《數(shù)字化建筑環(huán)境設(shè)計(jì)軟件基礎(chǔ)SketchUP》2021-2022學(xué)年第一學(xué)期期末試卷
- 期刊經(jīng)營轉(zhuǎn)讓協(xié)議書范文模板
- 吉林師范大學(xué)《中國畫技法研究》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)《虛擬現(xiàn)實(shí)設(shè)計(jì)與制作》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年大棚蔬菜分包協(xié)議書模板
- 2024年大蔥采購協(xié)議書模板
- 2024年國家公務(wù)員考試《行測》真題卷(副省級(jí))答案及解析
- 教育局職業(yè)院校教師培訓(xùn)實(shí)施方案
- 2024年新華社招聘應(yīng)屆畢業(yè)生及留學(xué)回國人員129人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 江蘇省南京市秦淮區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期中語文試題及答案
- 2024年個(gè)人車位租賃合同參考范文(三篇)
- (完整版)新概念英語第一冊(cè)單詞表(打印版)
- 簽申工作準(zhǔn)假證明中英文模板
- 員工履歷表(標(biāo)準(zhǔn)樣本)
- 2024年山東省濟(jì)南市中考數(shù)學(xué)真題(含答案)
- 山東省青島市黃島區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期中語文試卷
- 二手門市銷售合同范本
評(píng)論
0/150
提交評(píng)論