




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Fundamentals of Computers暨南大學(xué)珠海學(xué)院Windows編程制作:劉曉翔2022-4-29第五講 菜單編程Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-292內(nèi)容安排內(nèi)容安排菜單編程菜單編程n 菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)n 基本菜單操作基本菜單操作n MFC菜單命令更新機(jī)制菜單命令更新機(jī)制n 制作快捷菜單制作快捷菜單n 動態(tài)菜單操作動態(tài)菜單操作Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022
2、-4-293彈出式菜單與菜單項(xiàng)彈出式菜單與菜單項(xiàng) MFC中,設(shè)置為中,設(shè)置為Pop-up類型的菜單稱為類型的菜單稱為彈出式菜彈出式菜單單,VC+默認(rèn)頂層菜單為彈出式菜單,這種菜單默認(rèn)頂層菜單為彈出式菜單,這種菜單不不能響應(yīng)命令能響應(yīng)命令。 將菜單的屬性對話框中的將菜單的屬性對話框中的Pop-up選項(xiàng)去掉,該菜選項(xiàng)去掉,該菜單成為一個單成為一個菜單項(xiàng)菜單項(xiàng),對應(yīng)有一個,對應(yīng)有一個ID號,號,可以響應(yīng)命可以響應(yīng)命令令。菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-294Windo
3、ws消息的分類消息的分類n 標(biāo)準(zhǔn)消息標(biāo)準(zhǔn)消息 除除WM_COMMAND之外之外,所有以所有以WM_開頭的消息開頭的消息。 從從CWnd派生的類,都可以接收到這類消息。派生的類,都可以接收到這類消息。n 命令消息命令消息 來自來自菜單、加速鍵或工具欄菜單、加速鍵或工具欄按鈕的消息。這類消息都以按鈕的消息。這類消息都以WM_COMMAND呈現(xiàn)。在呈現(xiàn)。在MFC中,通過菜單項(xiàng)的標(biāo)識(中,通過菜單項(xiàng)的標(biāo)識(ID)來區(qū)分不同的命令消息;在)來區(qū)分不同的命令消息;在SDK中,通過消息的中,通過消息的wParam參數(shù)識別。參數(shù)識別。從從CCmdTarget派生的類,都可以接收到這類消息。派生的類,都可以接收
4、到這類消息。n 通告消息通告消息 由由控件控件產(chǎn)生的消息,例如,按鈕的單擊,列表框的選擇等均產(chǎn)生此類消息,產(chǎn)生的消息,例如,按鈕的單擊,列表框的選擇等均產(chǎn)生此類消息,為的是向其父窗口(通常是對話框)通知事件的發(fā)生。這類消息也是以為的是向其父窗口(通常是對話框)通知事件的發(fā)生。這類消息也是以WM_COMMAND形式呈現(xiàn)。形式呈現(xiàn)。從從CCmdTarget派生的類,都可以接收到這類消息。派生的類,都可以接收到這類消息。菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-295菜單命令響
5、應(yīng)函數(shù)與響應(yīng)順序菜單命令響應(yīng)函數(shù)與響應(yīng)順序 菜單相應(yīng)命令:在菜單相應(yīng)命令:在ClassWizard中添加。中添加。 響應(yīng)順序:(示例)響應(yīng)順序:(示例)CMenuViewCMenuDocCMainFrameCMenuApp菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-296菜單命令路由的過程菜單命令路由的過程當(dāng)點(diǎn)擊某菜單項(xiàng)時,最先接收到這個菜單命令消息的是當(dāng)點(diǎn)擊某菜單項(xiàng)時,最先接收到這個菜單命令消息的是框架類框架類。框架類把接收到的這個消息傳給它的子窗口,即框架類把接收到的這
6、個消息傳給它的子窗口,即視類視類。視類根據(jù)。視類根據(jù)命令消息映射機(jī)制查找自身是否對這個消息進(jìn)行了響應(yīng),如果響命令消息映射機(jī)制查找自身是否對這個消息進(jìn)行了響應(yīng),如果響應(yīng)了,則調(diào)用自身相應(yīng)響應(yīng)函數(shù)。應(yīng)了,則調(diào)用自身相應(yīng)響應(yīng)函數(shù)。如果視類沒有對此命令消息作出響應(yīng),就交由如果視類沒有對此命令消息作出響應(yīng),就交由文檔類文檔類,文檔類同,文檔類同樣查找自身是否這個消息進(jìn)行了響應(yīng),如果響應(yīng)了,則調(diào)用自身樣查找自身是否這個消息進(jìn)行了響應(yīng),如果響應(yīng)了,則調(diào)用自身相應(yīng)響應(yīng)函數(shù)。相應(yīng)響應(yīng)函數(shù)。如果文檔類也未做出響應(yīng),就把這個命令消息交還給視類,后者如果文檔類也未做出響應(yīng),就把這個命令消息交還給視類,后者再交還給再交
7、還給框架類框架類。框架類查看自己是否對這個命令消息進(jìn)行了響應(yīng),如果它也沒有框架類查看自己是否對這個命令消息進(jìn)行了響應(yīng),如果它也沒有相應(yīng),就把這個菜單命令消息交給相應(yīng),就把這個菜單命令消息交給應(yīng)用程序類應(yīng)用程序類,由后者來處理。,由后者來處理。菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-297內(nèi)容安排內(nèi)容安排菜單編程菜單編程n 菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)n 基本菜單操作基本菜單操作n MFC菜單命令更新機(jī)制菜單命令更新機(jī)制n 制作快捷菜單制作快捷菜單n 動態(tài)菜單操作動態(tài)菜單操作
8、Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-298基本菜單操作基本菜單操作菜單的結(jié)構(gòu)菜單的結(jié)構(gòu)頂級菜單頂級菜單(菜單欄),依附于主(菜單欄),依附于主框架上。框架上。CMenu* GetMenu()子菜單子菜單(彈出菜單)(彈出菜單)CMenu* GetSubMenu(int nPos)菜單項(xiàng)菜單項(xiàng)(注:分隔符也算一個菜單項(xiàng))(注:分隔符也算一個菜單項(xiàng))Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-29
9、9基本菜單操作基本菜單操作標(biāo)記菜單(在菜單項(xiàng)前面打上勾)標(biāo)記菜單(在菜單項(xiàng)前面打上勾)GetMenu()-GetSubMenu(0)-CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);GetMenu()-GetSubMenu(0)- CheckMenuItem(ID_FILE_NEW, MF_CHECKED);注意:注意:在使用索引的時候在使用索引的時候 “分隔符分隔符”也要算上。也要算上。UNIT CheckMenuItem(UINT nIDCheckItem, UINT nCheck)實(shí)例一:實(shí)例一:實(shí)例二:實(shí)例二:Fundamentals of C
10、omputers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2910基本菜單操作基本菜單操作圖形標(biāo)記菜單(在菜單項(xiàng)前面加上位圖)圖形標(biāo)記菜單(在菜單項(xiàng)前面加上位圖)UNIT SetMenuItemBitmaps(UINT nPosition, UINT nFlag, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked)bmp1.LoadBitmap(IDB_BITMAP1);bmp2.LoadBitmap(IDB_BITMAP2);GetMenu()-GetSubMenu(0)-Set
11、MenuItemBitmaps(0, MF_BYPOSITION, &bmp1, &bmp2);注意:注意:位圖大小必須為位圖大小必須為13 x 13。bmp1、bmp2為主框類的成員對象;為主框類的成員對象;若為局部變量,菜單標(biāo)記后要加上若為局部變量,菜單標(biāo)記后要加上bmp.Detach()實(shí)例:實(shí)例:Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2911基本菜單操作基本菜單操作禁用菜單項(xiàng)禁用菜單項(xiàng)UNIT EnableMenuItem(UINT nIDEnableItem, UI
12、NT nEnable)GetMenu()-GetSubMenu(0)-EnableMenuItem(0, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);注意注意1:菜單的禁用狀態(tài)和變灰狀態(tài)是不同的。通常把菜單的禁用狀態(tài)和變灰狀態(tài)是不同的。通常把MF_GRAYED和和MF_DISABLED這兩個標(biāo)志放在一起使用這兩個標(biāo)志放在一起使用注意注意2:該函數(shù)要生效,必須在該函數(shù)要生效,必須在CMainFrame類的構(gòu)造函數(shù)中把成員類的構(gòu)造函數(shù)中把成員變量變量m_bAutoMenuEnable設(shè)置為設(shè)置為FALSE。要使用菜單命令更新。要使用菜單命令更新機(jī)制(后面有講)
13、,則該變量應(yīng)設(shè)置為機(jī)制(后面有講),則該變量應(yīng)設(shè)置為TRUE(缺省值)。(缺省值)。實(shí)例:實(shí)例:Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2912基本菜單操作基本菜單操作移除和加載菜單移除和加載菜單BOOL SetMenu(CMenu* pMenu)移除菜單:移除菜單:SetMenu(NULL);加載菜單:加載菜單:CMenu menu;menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);注意:注意:如果如果CMenu對象是一個對象是一個臨時對象臨時對
14、象,則在加載完成之后必須加,則在加載完成之后必須加上上menu.Detach()。Detach會把菜單句柄與這個菜單對象分離,這會把菜單句柄與這個菜單對象分離,這樣,當(dāng)這個局部對象的生命周期結(jié)束時,它不會去銷毀一個它不樣,當(dāng)這個局部對象的生命周期結(jié)束時,它不會去銷毀一個它不再具有擁有權(quán)的菜單資源。再具有擁有權(quán)的菜單資源。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2913內(nèi)容安排內(nèi)容安排菜單編程菜單編程n 菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)n 基本菜單操作基本菜單操作n MFC菜單命令更新機(jī)制菜單命令更新機(jī)
15、制n 制作快捷菜單制作快捷菜單n 動態(tài)菜單操作動態(tài)菜單操作Fundamentals of Computers暨南大學(xué)珠海學(xué)院Windows編程制作:劉曉翔JINAN University2022-4-2914MFC菜單命令更新機(jī)制菜單命令更新機(jī)制 菜單項(xiàng)狀態(tài)的維護(hù)是依賴于菜單項(xiàng)狀態(tài)的維護(hù)是依賴于CN_UPDATE_COMMAND_UI消息,誰捕獲消息,誰捕獲CN_UPDATE_COMMAND_UI消息,消息,MFC就在其就在其中創(chuàng)建一個中創(chuàng)建一個CCmdUI對象。我們可以通過對象。我們可以通過ClassWizard在消息映在消息映射中添加射中添加ON_UPDATE_COMMAND_UI宏來捕獲
16、宏來捕獲CN_UPDATE_COMMAND_UI消息。消息。 在后臺所做的工作是:當(dāng)顯示菜單的時候,操作系統(tǒng)發(fā)出在后臺所做的工作是:當(dāng)顯示菜單的時候,操作系統(tǒng)發(fā)出WM_INITMENUPOPUP消息,然后由消息,然后由MFC的基類如的基類如CFrameWnd接管。它創(chuàng)建一個接管。它創(chuàng)建一個CCmdUI對象,并與第一個菜單對象,并與第一個菜單項(xiàng)相關(guān)聯(lián),調(diào)用對象的一個成員函數(shù)項(xiàng)相關(guān)聯(lián),調(diào)用對象的一個成員函數(shù)DoUpdate()。這個函數(shù)發(fā)。這個函數(shù)發(fā)出出CN_UPDATE_COMMAND_UI消息,這條消息帶有指向消息,這條消息帶有指向CCmdUI對象的指針。同一個對象的指針。同一個CCmdUI對
17、象就設(shè)置為與第二個對象就設(shè)置為與第二個菜單項(xiàng)相關(guān)聯(lián),這樣順序進(jìn)行,直到完成所有菜單項(xiàng)。菜單項(xiàng)相關(guān)聯(lián),這樣順序進(jìn)行,直到完成所有菜單項(xiàng)。 更新命令更新命令UI處理程序處理程序僅應(yīng)用于彈出式菜單項(xiàng)上的項(xiàng)目(有僅應(yīng)用于彈出式菜單項(xiàng)上的項(xiàng)目(有ID號)號),不能應(yīng)用于頂層菜單項(xiàng)目(無不能應(yīng)用于頂層菜單項(xiàng)目(無ID號)號)。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2915MFC菜單命令更新菜單命令更新MFC菜單命令更新機(jī)制菜單命令更新機(jī)制void CMainFrame:OnUpdateEditCopy(
18、CCmdUI* pCmdUI) / TODO: Add your command update UI handler code herepCmdUI-Enable(TRUE);pCmdUI-SetCheck();pCmdUI-SetText(123);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2916內(nèi)容安排內(nèi)容安排菜單編程菜單編程n 菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)n 基本菜單操作基本菜單操作n MFC菜單命令更新機(jī)制菜單命令更新機(jī)制n 制作快捷菜單制作快捷菜單n 動態(tài)菜單操作動態(tài)菜單操作Fundam
19、entals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2917Step1:為:為Menu程序增加一個新的菜單資源程序增加一個新的菜單資源制作快捷菜單制作快捷菜單 在在ResouceView上的上的Menu分支上單擊鼠標(biāo)右件,選分支上單擊鼠標(biāo)右件,選擇擇“Insert Menu”命令,為這個菜單資源添加菜單項(xiàng)。命令,為這個菜單資源添加菜單項(xiàng)。 由于在顯示快捷菜單時頂級菜單不出現(xiàn),所以可以由于在顯示快捷菜單時頂級菜單不出現(xiàn),所以可以給它設(shè)置任意的文本。給它設(shè)置任意的文本。Fundamentals of Computers制
20、作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2918Step2:給視類添加:給視類添加WM_RBUTTONDOWN消息響應(yīng)函數(shù)消息響應(yīng)函數(shù)制作快捷菜單制作快捷菜單加載菜單資源到加載菜單資源到CMenu對象對象void CMenuView:OnRButtonDown(UINT nFlags, CPoint point) CMenu menu;menu.LoadMenu(IDR_MENU1);CView:OnRButtonDown(nFlags, point);Fundamentals of Computers制作:劉曉翔JINAN Universit
21、y暨南大學(xué)珠海學(xué)院Windows編程2022-4-2919Step3:調(diào)用:調(diào)用TrackPopupMenu函數(shù)函數(shù)制作快捷菜單制作快捷菜單void CMenuView:OnRButtonDown(UINT nFlags, CPoint point) CMenu menu;menu.LoadMenu(IDR_MENU1);CMenu* pPopup = menu.GetSubMenu(0);pPopup-TrackPopupMenu(TPM_LEFTALIGN, point.x ,point.y, this);CView:OnRButtonDown(nFlags, point);Fundame
22、ntals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2920將鼠標(biāo)點(diǎn)的客戶去坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)將鼠標(biāo)點(diǎn)的客戶去坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)制作快捷菜單制作快捷菜單void CMenuView:OnRButtonDown(UINT nFlags, CPoint point) CMenu menu;menu.LoadMenu(IDR_MENU1);ClientToScreen(&point);CMenu* pPopup = menu.GetSubMenu(0);pPopup-TrackPopupMenu(TPM_LEFTAL
23、IGN, point.x ,point.y, this);CView:OnRButtonDown(nFlags, point);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2921Step4:添加響應(yīng)函數(shù):添加響應(yīng)函數(shù)制作快捷菜單制作快捷菜單利用利用ClassWizard添加。添加。void CMenuView:OnTest1() / TODO: Add your command handler code hereMessageBox(View Test1);void CMenuView:OnTe
24、st2() / TODO: Add your command handler code hereMessageBox(View Test2);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2922關(guān)于快捷菜單中的菜單項(xiàng)的命令響應(yīng)的說明關(guān)于快捷菜單中的菜單項(xiàng)的命令響應(yīng)的說明制作快捷菜單制作快捷菜單 對于快捷菜單,如果將其擁有者窗口設(shè)置為框架對于快捷菜單,如果將其擁有者窗口設(shè)置為框架類窗口,則框架類窗口才能有機(jī)會獲得對該快捷菜單類窗口,則框架類窗口才能有機(jī)會獲得對該快捷菜單中的菜單項(xiàng)的命令響應(yīng),否則,就
25、只能有視類窗口作中的菜單項(xiàng)的命令響應(yīng),否則,就只能有視類窗口作出響應(yīng)。出響應(yīng)。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2923內(nèi)容安排內(nèi)容安排菜單編程菜單編程n 菜單響應(yīng)函數(shù)菜單響應(yīng)函數(shù)n 基本菜單操作基本菜單操作n MFC菜單命令更新機(jī)制菜單命令更新機(jī)制n 制作快捷菜單制作快捷菜單n 動態(tài)菜單操作動態(tài)菜單操作Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2924添加菜單項(xiàng)目(添加菜單項(xiàng)目(Appe
26、ndMenu)動態(tài)菜單操作動態(tài)菜單操作CMenu my_menu;my_menu.CreateMenu();GetMenu()-AppendMenu( MF_POPUP, (UINT) my_menu.m_hMenu, my_menu);my_menu.Detach();添加頂層菜單:添加頂層菜單:添加頂層菜單下的菜單項(xiàng):添加頂層菜單下的菜單項(xiàng):GetMenu()-GetSubMenu(0)-AppendMenu(MF_STRING, 777, Hello);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-4-2925插入菜單項(xiàng)目(插入菜單項(xiàng)目(InsertMenu)動態(tài)菜單操作動態(tài)菜單操作CMenu my_menu;my_menu.CreateMenu();GetMenu()-InsertMenu(2, MF_BYPO
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掛靠聯(lián)營協(xié)議合同
- 各行業(yè)人才招聘量統(tǒng)計表
- 二手房房屋買賣合同書
- 礦用管路安裝施工方案
- 萃取塔清洗施工方案
- 屋面臺階維修施工方案
- 衡水罐體鐵皮保溫施工方案
- 腦血管病用藥項(xiàng)目風(fēng)險識別與評估綜合報告
- 安徽拼接式蓄水池施工方案
- 同花順:2024年年度審計報告
- 2024解析:第八章牛頓第一定律、二力平衡-基礎(chǔ)練(解析版)
- 高職高考數(shù)學(xué)復(fù)習(xí)第四章指數(shù)函數(shù)與對數(shù)函數(shù)4-3對數(shù)的概念及運(yùn)算課件
- 全國計算機(jī)等級考試(NCRE) 計算機(jī)一級(MS Office)考前必背題庫(含答案)
- 工地早班會活動記錄表(普工、塔司、信號工)
- 2024解析:第十三章內(nèi)能-基礎(chǔ)練(解析版)
- 《selenium安裝教程》課件
- 第47屆世界技能大賽網(wǎng)絡(luò)安全項(xiàng)目江蘇省選拔賽-模塊C樣題
- 提高痰標(biāo)本留取成功率 呼吸科QCC成果匯報品管圈護(hù)理課件
- 2024年遼寧省中考數(shù)學(xué)真題卷及答案解析
- 物業(yè)員工安全知識教育培訓(xùn)
- 動物性食品衛(wèi)生檢驗(yàn)教案2
評論
0/150
提交評論