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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章

MFC菜單編程3.1菜單編程3.2菜單消息的傳輸機制3.3動態(tài)菜單操作3.4小結主要內容菜單分類菜單創(chuàng)建菜單加載與顯示響應菜單命令更新菜單項菜單動態(tài)編輯3.1菜單編程菜單分類:彈出式菜單下拉式菜單級聯(lián)菜單快捷菜單3.1.1創(chuàng)建菜單創(chuàng)建菜單步驟:(1)添加一個自定義的菜單資源;(2)用菜單編輯器設計菜單;(3)將菜單加入應用程序;(4)為每個菜單命令添加消息映射。3.1.1創(chuàng)建菜單明確幾個點菜單ID命名:ID_頂層菜單名_下一級菜單名……快捷鍵,例Alt+k加速鍵,例Ctrl+k3.1.1創(chuàng)建菜單演示添加菜單資源,使用菜單編輯器編輯菜單。菜單命令項及其消息映射MFC程序可以處理兩種菜單消息:WM_COMMAND:為菜單命令消息;

菜單命令項消息映射宏格式是: ON_COMMAND(ID,消息響應函數(shù)名)ON_COMMAND(ID_FILE_NEW,OnFileNew)UPDATE_COMMAND_UI:為菜單更新消息,處理菜單狀態(tài)的動態(tài)變化。如希望根據(jù)程序的執(zhí)行狀態(tài),激活或禁用某些菜單項,設置選中標記,或更改菜單項文字等,菜單命令項及其消息映射用戶點擊菜單項后,會產生命令消息WM_COMMAND,消息的參數(shù)中會包含菜單項的ID號,以區(qū)別點擊那個菜單項。命令消息可以映射到視圖、文檔、框架或者應用程序類中。命令消息處理路徑:視圖類→文檔類→文檔模板類→框架窗口類→應用程序類菜單命令項及其消息映射演示菜單的兩種消息響應。尤其是UPDATE_COMMAND_UI消息響應,利用響應函數(shù)中傳進來的CCmdUI對象指針可完成設置菜單項可使用,不可使用,變灰,設置標記菜單等操作。pCmdUI->Enable(false);//true和false來設置能否使用或變灰pCmdUI->SetCheck(true);//true和false來設置標記pCmdUI->SetText(“cut”);//改變菜單項文本內容菜單的相關重要函數(shù)1.CMenu*GetMenu();//得到菜單指針2.CMenu*GetSubMenu();//得到子菜單指針,也就是彈出菜單指針3.UINTCheckMenuItem(

);//將菜單項加上或去掉√(對號)標記a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMAND|MF_CHECKED的組合b.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION|MF_CHECKED的組合菜單的相關重要函數(shù)4.BOOLSetDefaultItem();//設置缺省菜單,也就是將菜單項粗體顯示a.如果第一個參數(shù)是索引號,第二個參數(shù)必須是trueb.如果第一個參數(shù)是ID號,第二個參數(shù)必須是false*注:一個子菜單最多只能有一個缺省菜單項5.BOOLSetMenuItemBitmaps(

);//設置位圖標記,標記大小為13*13像素a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMANDb.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION第三個參數(shù)是沒有選中時的位圖;第四個參數(shù)是標記時的位圖菜單的相關重要函數(shù)6.UINTEnableMenuItem();//使菜單項有效,無效,或變灰a.如果第一個參數(shù)是ID號,第二個參數(shù)必須是MF_BYCOMMAND和有效,無效,或變灰的組合b.如果第一個參數(shù)是索引號,第二個參數(shù)必須是MF_BYPOSITION和有效,無效,或變灰的組合*注:若讓此函數(shù)生效,必須在CMainFrame構造函數(shù)中添加:m_bAutoMenuEnable=false。菜單的相關重要函數(shù)7.BOOLSetMenu(CMenu*pMenu);//在當前窗口上設置新菜單或移除菜單。如果參數(shù)為0,則是移除菜單。自己創(chuàng)建菜單{CMenumenu;menu.LoadMenu(IDR_MENU1);SetMenu(&menu);menu.Detach();}8.HMENUDetach();//如果將CMenu對象設置為局部對象,使用Detach()從menu對象中分離窗口菜單句柄,從而當menu對象析構的時候窗口菜單資源不隨之銷毀。菜單的相關操作的實現(xiàn)方法

a.添加對號標記:方法一:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);//通過索引方法二:GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);//通過IDb.設置缺省菜單項:每個子菜單最多只能有一個缺省菜單項方法一:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,true);//通過索引方法二:GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,false);//通過ID菜單的相關操作的實現(xiàn)方法

c.添加圖形標記:方法一:通過IDCBitmapbitmap;//必須設置為全局對象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_NEW,MF_BYCOMMAND,&bitmap,&bitmap);方法二:通過索引CBitmapbitmap;//必須設置為全局對象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);菜單的相關操作的實現(xiàn)方法d.使菜單無效,變灰//必須在構造函數(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é)省,在應用程序中動態(tài)創(chuàng)建菜單分兩個步驟:1.調用函數(shù)創(chuàng)建空的彈出式菜單BOOLCreateMenu()BOOLCreatePopupMenu()2.調用函數(shù)AppendMenu或InsertMenu在該菜單中加入菜單項。3.增加菜單項

在菜單的尾部增加菜單項

BOOLAppendMenu(UINTdwFlags, //新加入的菜單項類型標識 UINTdwIDNewItem, //新加入菜單項的ID LPCTSTRlpNewItem //新加入的菜單項內容)

nFlags:MF_POPUP(彈出菜單);MF_SEPARATOR(分隔欄);MF_STRING(字符串)nIDNewItem:如果第一個參數(shù)為彈出菜單,則第二個參數(shù)為新菜單句柄;如果第一個參數(shù)為分隔欄,則第二個參數(shù)就忽略了lpszNewItem:菜單名稱例如在“文件”菜單的末尾增加一項“關于”:AppendMenu(MF_STRING,201,“關于(&A)“);

(2)在菜單中插入菜單項

調用函數(shù)InsertMenu在菜單中插入新的菜單BOOLInsertMenu(UINTwPosition, //指定新菜單項插入的位置UINTdwFlag, //新加入的菜單項的信息UINTdwIDNweItem, //新加入的菜單項的標識LPCTSTRlpNewItem //新插入的菜單項的內容)

例如,在“文件”菜單的“退出”項之前加入“打印”菜單項;InsertMenu(2,MF_BYPOSITION|MF_STRING,IDM_PRINT,"打印(&P)");4.刪除菜單項調用函數(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論