第3章 MFC菜單編程_第1頁
第3章 MFC菜單編程_第2頁
第3章 MFC菜單編程_第3頁
第3章 MFC菜單編程_第4頁
第3章 MFC菜單編程_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論