亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 06.3.7 快捷菜單.txt

?? 網上第一本以TXT格式的VC++深入詳解孫鑫的書.全文全以TXT格式,并每一章節都分了目錄,清晰易讀
?? TXT
字號:
6.3.7 快捷菜單
我們平時在使用程序時,經常會用到單擊鼠標右鍵顯示快捷菜單(也稱為上下文菜單,或右鍵菜單〉這一功能。現在我們的這個Menu程序還不具備這個功能,讀者可以試試在 Menu程序的窗口中單擊鼠標右鍵,會發現程序沒有任何反應。
要實現右鍵快捷菜單功能,讀者可能會覺得無從下手。實際上, VC++己經為我們實現了這個功能。我們可以在VC++開發界面中選擇【Project】菜單下的【Add To Project>,然后從它的下拉菜單中選擇【Components and Controls....】菜單項。如圖6.28所示。
圖 6.28添加已有組件或控件的菜單命令
這時會出現如圖 6.29所示的組件和控件庫對話框。這個組件和控件庫里的內容是 VC++己經為我們編寫好的一些功能,就是一些組件和 ActiveX控件,可以供我們方便地直接調用它們。
在圖6.29所示的對話框中,雙擊Visual C++ Components目錄,從而打開這個目錄,該目錄下的內容如圖 6.30所示。其中,可以看到有一個名稱為 "Pop-upMenu"的組件,這個組件的作用就是給一個派生于CWnd類的窗口添加一個右鍵菜單。選中此工頁,然后單擊【Insert】按鈕,系統會提示用戶是否確認當前的插入操作,單擊【確定】按鈕,確認此操作即可。這時就會出現如圖6.31所示的添加右鍵菜單設置對話框。 
圖 6.29 Components and Controls Gallery對話框 圖 6.30 Visual C++提供的組件
通過如圖6.31所示的這個對話框,可以設置新添加的這個彈出菜單將添加到哪個窗口上,即圖6.31中的Add pop-up menu to下拉列表框中顯示的那個類。這里,不應該選擇 CMainFrame類,因為前面己經介紹過了,視類窗口始終是覆蓋在框架窗口之上的,框架窗口接收不到鼠標消息,而右鍵菜單是在鼠標右鍵單擊時產生的,而在框架窗口中又捕獲不到鼠標右鍵單擊這一消息,也就無法顯示快捷菜單。所以,這里應該選擇 CMenuView類。在Menu resource ID編輯框中顯示的是快捷菜單的資源ID,我們可以在這里修改這個標識,也可以以后再修改。本例中保持默認標識不變,然后單擊【OK】按鈕,即可返回到圖6.30所示的窗口界面,單擊【Close】按鈕,結束組件的添加。 
Build并運行Menu程序,然后在程序的窗口中單擊鼠標右鍵,此時會出現一個快捷萊 

‘~... I 189 


第6
單。如圖6.32所示。 
這時,在Menu這個工程中可以看到,在插入了這個Pop-upMenu組件后,添加了以下兩處內容:
第一處,在 ResourceView選項卡的Menu分支下多了一個標識為CGJDRYOPUP-MENU VIEW的菜單資源,這個菜單只有一個頂層菜單項: _POPUP_,其下有三個菜單項(如圖6.33所示),也就是如圖6.32所示的快捷菜單中的內容。 
圖6.33添加Pop-upMenu組件后增加的快捷菜單資源

第二處,為CMenuView類添加了一個函數: OnContextMenu。在Menu程序運行時,當用鼠標右鍵單擊窗口時,程序就會調用這個函數。如例6-20所示代碼是VC++為我們添加的這個函數的源代碼。 
f~tl6-20 

void CMenuView : :OnContextMenu(CWnd會, CPoint poínt) 

11  CG :  This b10ck  was  added by  the  Pop-up Menu  component  
{  
if  (point .x  -1  &&  point .y  -1) {  
Ilkeystroke  invocation  
CRect  rect ;  
GetClientRect(rect) ;  
ClientToScreen(rect) ;  
point  =  rect . TopLeft() ;  
point .Offset(5 ,  5) ;  
CMenu nenu ; 
VERIFY(rnenu . LoadMenu(CG_IDR_POPUP_MENU_VIEW)) ; 

CMenu* pPopup = rnenu . GetSubMenu(O) ; 
ASSERT(pPOpup != NULL); 
CWnd* pWndPopupOwner = th工S ; 

while 	(pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); 
pPopup->TrackPopupMenu(TPM_LEFTAL工 GN I TPM_RIGHTBUTTON , point . x , poìnt.y, pWndPopupOwner) ; 
可以看到,這個函數內部調用了 TrackPopupMenu函數來顯示一個快捷菜單。后者具有以下形式的聲明: 
BOOL TrackPopupMenu(UINT nFlags , int x , int y ,CWnd* pWnd, LPCRECT lpRect = NULL) ; 
該函數的參數含義如下所述: 
. nFlags 
指定菜單在屏幕上顯示的位置。 
. x和 y
分別指定快捷菜單顯示位置處的 x坐標和 y坐標。 

. pWnd 
指定快捷菜單的擁有者,也就是標識擁有快捷菜單的窗口對象。 
. lpRect 
指定一塊矩形區域。如果用戶在這個設定區域之內單擊鼠標,快捷菜單仍保持顯示:否則快捷菜單消失。如果這個參數的值是 NULL,當用戶在這個快捷菜單范圍之外其他地方單擊鼠標時,這個菜單就將消失。 lpRect參數的默認值是 NULL o
既然知道了 TrackPopupMenu這個函數就是用來顯示快捷菜單的,就可以在 Menu程序中實現自己的快捷菜單了。這可以通過以下幾個步驟來實現 : 
E為 Menu程序增加一個新的菜單資源。可以在 ResourceView選項卡上的 Menu分支上單擊鼠標右鍵,從彈出的菜單中選擇【In sert Menu】菜單命令,這時,在 Menu分支下就多了一個名為 IDR MENUl的菜單資源,井同時在 VC++開發界面窗口的右邊窗口中打開了這個菜單資源。接著就要為這個菜單資源添加菜單項了。因為在顯示快捷菜單時頂級菜單是不出現的,所以可以給它設置任意的文本,例如 abc。接著,依次添加表 6.1中列出的兩個菜單項: 
表 6.1需添加的菜單項
菜單項文本 菜單項標識 
顯示  IDM SHOW  
退出  IDM EXIT  

回給 CMenuView類添加 WM RBUπONDOWN消息響應函數。如果是在鼠標右鍵單擊窗口時顯示快捷菜單,那么就應該捕獲這個消息。對于這個消息響應函數處理的內容可以參照剛才系統自動添加的 OnContextMenu函數,最后的實現代碼如例 6-21所示。
例 6-21 

void CMenuView :: OnRButtonDown(U工 NT nFlags , CPoint point) 
// TODO: Add your message handler code here and/or call default 
CMenu menu; 
menu.LoadMenu(IDR_MENU1) ; 
CMenu* pPopup = menu.GetSubMenu( O) ; 
pPopup->TrackPopupMenu(TPM_LEFTALIGN TPM_RIGHTBUTTON , point.x, point .y, this) ; 
CView : :OnRButtonDown(nFlags , point); 
在這個鼠標右鍵消息響應函數中,首先定義了一個 CMenu對象: menu,接著加載 C LoadMenu函數)菜單資源,并獲取該菜單的第一個子菜單(GetSubMenu函數)。對快捷菜單來說,實際上只有一個子菜單(位置索引為 0)。最后,調用 TrackPopupMenu函數顯示快捷菜單。 
Build井運行 Menu程序,然后在該程序窗口中單擊鼠標右鍵,此時就會出現我們自定義的快捷菜單,如圖 6.34所示。
但是,這個快捷菜單顯示的位置好像不太對,并不是在鼠標右鍵單擊點處顯示的。這是因為 TrackPopupMenu函數中的 x和 y參數都是屏幕坐標,而鼠標單擊點處的坐標是窗口客戶區坐標,即以程序窗口左上角為坐標原點。圖 6.35顯示了窗口坐標和屏幕坐標的關系。 
圖 6.34自定義的快捷菜單的顯示圖 6.35窗口坐標和屏幕坐標
這樣,就需要把客戶區坐標轉換為屏幕坐標。我們知道剛才利用OnContextMenu函數顯示快捷菜單時一切都是正常的,那么我們看看它的實現代碼 (例 6-20所示代碼),可以發現它調用了一個名為 ClientToScreen的函數。政函數的作用就是把客戶區坐標轉換為屏幕坐標,這正是我們所需要做的工作。于是修改例 6-21所示 CMenuView類的 OnRButtonDown函數,在調用TrackPopupMenu函數之前添加下面這行代碼完成坐標轉換: 
ClientToScreen(&point) ; 
再次Build并運行Menu程序,并在程序窗口中單擊鼠標右鍵,發現此時快捷菜單的顯示位置正常了,如圖6.36所示。
由為Menu程序添加快捷菜單上各菜單項命令的響應函數。可以在ResourceView選項卡上雙擊IDR_MENUl菜單資源,使其在資源編輯窗口中打開。然后在【顯示】菜單項上用單擊鼠標右鍵,從出現的快捷菜單中選擇【ClassWizard..】命令,這時會出現如圖6.37所示的對話框。該對話框詢問是否為IDR MENUl這個資源創建一個新類或者選擇一個己有類。可以不用對此做出處理,單擊【Cancel】按鈕取消此對話框即可。 
圖 6.36正確的快捷菜單顯示圖 6.37 Adding a Class對話框

然后利用ClassWizard,分別為CMainFrame類和CMenuView類添加一個響應【顯示】菜單項(ID為10MSHOW)的函數(直接接受系統提供的默認函數名:OnShow),添加時,應在ClassWizard對話框中的Messages列表中選擇COMMAND消息。
接下來為新添加的消息處理函數添加代碼,在CMenuView類的 OnShow函數中添加如例6-22所示代碼中加灰顯示的那行代碼。
例6-22 void CMenuV工ew: : OnShow ( ) 
MessageBox ("View show"); 

在CMainFrame類的OnShow函數中添加例6-23所示代碼中加灰顯示的那行代碼。
例6-23 

void CMainFrame: :OnShow() 
MessageBox ("Main show"); , 

, 
Build并運行 Menu程序,并在程序窗口中單擊鼠標右鍵,從出現的快捷菜單中選擇【顯示】菜單項,這時會彈出一個消息框,發現它顯示的信息是: View show,說明是視類響應了這個菜單命令消息。我們將 CMenuView類對【顯示】菜單命令消息的響應函數刪除,再次運行 Menu程序,并選擇快捷菜單中的【顯示】菜單項,可是,這時程序沒有任何反應。這主要是因為在創建快捷菜單時,即調用 TrackPopupMenu函數時,對這個快捷菜單的擁有者參數傳遞的是由is值,也就是視類窗口擁有這個快捷菜單。因此,只有視類才能對快捷菜單項命令做出響應。如果想讓 CMainFrame類能對這個快捷菜單項進行響應的話,就應該在調用 TrackPopupMenu函數時把快捷菜單的擁有者指定為 CMainFrame類窗口,為此,我們可以修改 CMenuView類 OnRB uttonDown函數中對 TrackPopupMenu函數的調用,結果如例 6-24所示。 
19IJ6-24 

void CMenuView : :OnRButtonDown(UINT nFlags , CPoint point) 
CMenu menu ; 
menu.LoadMenu(IDR_MENU1) ; 
CMenu* pPopup = menu.GetSubMenu(O); 

ClientToScreen(&point) ; 
pPopup->TrackPopupMenu(TPM_LEFTAL工 GN I TPM_R工GHTBUTTON, point.x, point.y, Get Parent()}; 
CView : :OnRButtonDown(nFlags , point); 
Build井運行 Menu程序,并在程序窗口中單擊鼠標右鍵,從出現的快捷菜單中選擇【顯示】菜單項,這時會彈出一個消息框,發現它顯示的信息是: Main show,這說明是框架類窗口響應了這個菜單命令消息。
這時,如果我們在視類中也添加了這個【顯示】菜單項的響應函數,那將會是誰做出響應呢?我們可以為 CMenuView類再次添加這個響應函數,并為其添加如例 6-22所示的代碼。然后 Build并運行 Menu程序,并選擇快捷菜單中的【顯示】菜單項,發現這時彈出的消息框中顯示的是: View show,說明是視類捕獲到了這個菜單命令。讀者可以根據本章前面講述的菜單命令消息路由的過程來解釋這個結果。
國際:對于快捷菜單,如果將其擁有者窗口設置為框架類窗口,則框架類
窗口才能有機會獲得對該快捷菜單中的菜單項的命令響應,否則,就只能由視
類窗口 f放出響應。 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜高潮毛片| 午夜精品久久一牛影视| 日韩一区二区三区四区 | 欧美三区在线视频| 色综合久久九月婷婷色综合| 色哟哟国产精品| 色哟哟国产精品| 欧美日韩二区三区| 日韩午夜在线影院| 日本一区二区三区四区在线视频| 久久久久99精品国产片| 国产精品全国免费观看高清 | 欧美一区二区三区视频在线| 欧美一区国产二区| 日韩视频永久免费| 精品视频资源站| 欧美成人国产一区二区| 日韩欧美一级在线播放| 日韩无一区二区| 日韩一级免费一区| 精品国产一区二区国模嫣然| 欧美日韩国产综合一区二区| 久久国产精品露脸对白| 亚洲综合一区二区三区| 夫妻av一区二区| 久久99精品久久久久久国产越南| 日韩成人午夜精品| 夜夜嗨av一区二区三区中文字幕| 国产精品美女久久久久aⅴ | 91色|porny| 99re这里只有精品视频首页| 99re这里都是精品| 91福利国产成人精品照片| 91美女福利视频| 在线播放91灌醉迷j高跟美女| 欧美私人免费视频| 日韩免费高清av| 国产性做久久久久久| 1区2区3区国产精品| 一区二区日韩av| 蜜桃久久久久久| 成人一区二区三区视频| 色av成人天堂桃色av| 欧美一卡二卡在线观看| 国产夜色精品一区二区av| 国产精品电影一区二区三区| 亚洲激情自拍视频| 美女任你摸久久| www.欧美色图| 欧美高清视频在线高清观看mv色露露十八| 日韩免费在线观看| 亚洲欧美日韩国产中文在线| 热久久久久久久| 成人免费视频网站在线观看| 欧美制服丝袜第一页| 日韩欧美一区二区不卡| 亚洲人成人一区二区在线观看| 午夜精品国产更新| www.欧美.com| 日韩欧美国产三级| 国产精品丝袜91| 五月激情六月综合| 91同城在线观看| 精品剧情v国产在线观看在线| 国产精品第四页| 久久99精品国产麻豆婷婷洗澡| 日本高清不卡在线观看| www久久精品| 亚欧色一区w666天堂| 岛国精品在线播放| 精品精品国产高清a毛片牛牛| 亚洲美女屁股眼交| 韩国精品一区二区| 91精品国产综合久久精品麻豆 | 欧美在线看片a免费观看| 久久久久久久综合日本| 蜜臀久久久99精品久久久久久| 91在线码无精品| 国产精品的网站| 国产99久久久国产精品免费看| 欧美主播一区二区三区美女| 亚洲视频一区二区在线| 国产成人综合在线| ww久久中文字幕| 捆绑调教美女网站视频一区| 555www色欧美视频| 亚洲午夜av在线| 色999日韩国产欧美一区二区| 亚洲欧美自拍偷拍色图| 久久成人18免费观看| 国产传媒一区在线| 欧美成人一区二区三区片免费| 亚洲免费av高清| a在线播放不卡| 亚洲色图在线播放| 色悠久久久久综合欧美99| 国产精品素人视频| 成人18精品视频| 亚洲欧美偷拍卡通变态| 91麻豆精品视频| 亚洲国产你懂的| 欧美精品在线一区二区三区| 午夜电影网一区| 日韩免费在线观看| 国产白丝网站精品污在线入口| 久久众筹精品私拍模特| 韩国理伦片一区二区三区在线播放| 日韩一区二区在线看| 图片区日韩欧美亚洲| 日韩欧美二区三区| 国产乱人伦偷精品视频免下载| 国产日产欧产精品推荐色| aaa国产一区| 亚洲高清在线视频| 精品国产91亚洲一区二区三区婷婷| 国产中文一区二区三区| 亚洲天堂av一区| 欧美精品在线一区二区三区| 国产酒店精品激情| 国产精品国产精品国产专区不蜜| 国产高清精品网站| 精品国内片67194| 国产高清亚洲一区| 自拍偷拍亚洲激情| 欧美久久免费观看| 成人一区二区三区在线观看| 亚洲成人手机在线| 国产女同性恋一区二区| 欧美视频在线观看一区二区| 国产精品资源站在线| 亚洲一区二区在线观看视频| 久久综合五月天婷婷伊人| 91蜜桃视频在线| 韩国欧美国产1区| 一个色在线综合| 久久夜色精品一区| 欧美日韩中文另类| 成人毛片老司机大片| 亚洲成精国产精品女| 久久夜色精品国产噜噜av| 色综合久久久网| 国产盗摄一区二区| 免费的成人av| 一区二区理论电影在线观看| 久久久久久影视| 91精品国产91久久综合桃花| 99精品视频一区二区三区| 国产一区二区影院| 午夜精品福利一区二区三区蜜桃| 国产精品国产三级国产普通话99 | 欧美一二三四在线| 在线免费精品视频| 高清不卡一区二区| 国产精品一区二区无线| 精品一区二区久久久| 日韩高清在线一区| 亚洲aaa精品| 亚洲另类色综合网站| 久久蜜臀中文字幕| 亚洲精品一区二区三区影院| 欧美日韩一区二区三区视频| 99国产精品久久久久久久久久| 极品少妇一区二区| 久久精品国产亚洲a| 午夜精品久久久久久久| 亚洲激情中文1区| 国产精品久久久久一区 | 国产精品一区二区在线观看不卡 | 国产精品国产三级国产a | 在线不卡a资源高清| 欧美日韩国产一级片| 成人性生交大片免费看中文网站| 久久99国产精品久久99果冻传媒| 久久国产剧场电影| 国内成人精品2018免费看| 日韩电影在线观看一区| 午夜久久电影网| 免费高清成人在线| 国产一区二区三区四区五区美女| 亚洲成人在线观看视频| 一区二区三区国产| 亚洲成人综合视频| 老司机午夜精品99久久| 久久精品99久久久| 高清不卡一区二区在线| 99久久精品免费精品国产| 一本色道久久综合亚洲aⅴ蜜桃| 欧美性三三影院| 欧美videos大乳护士334| 久久综合九色欧美综合狠狠| 国产精品美女久久久久aⅴ| 夜夜爽夜夜爽精品视频| 裸体一区二区三区| 国产尤物一区二区| a级精品国产片在线观看| 欧美视频三区在线播放| 日韩一区二区影院| 国产精品传媒在线| 日本欧美大码aⅴ在线播放| 久国产精品韩国三级视频|