菜單欄,工具欄,狀態(tài)欄是組成Windows程序圖形界面的三個主要元素。大多數(shù)的Windows應(yīng)用程序都提供了菜單,作為用戶和程序之間的一種交互途徑。
菜單欄
在設(shè)置菜單欄的菜單項(xiàng)的時候,Pop-up屬性的為彈出菜單,這種菜單不能響應(yīng)命令,沒有ID號。
菜單命令的路由
相應(yīng)菜單項(xiàng)命令的順序是:視類(View),文檔類(Doc),框架類(Frame),應(yīng)用程序類(App)。
Windows消息的分類
標(biāo)準(zhǔn)消息:除了WM_COMMAND消息之外,所有以WM開頭的消息都是標(biāo)準(zhǔn)消息,從CWnd派生的類都可以響應(yīng)這類消息。
命令消息:來至菜單、加速鍵和工具欄按鈕的消息,這類消息都是以WM_COMMAND形式呈現(xiàn),在MFC中,通過菜單項(xiàng)的標(biāo)示ID來區(qū)分不同的命令消息,在SDK中,通過消息的wParam參數(shù)標(biāo)示,從CCmdTarget派生的類都可以接收這類消息。
通告消息:有控件產(chǎn)生的消息,例如按鈕的單擊,列表框的選擇等都會產(chǎn)生這類消息,目的是向其父窗口通知事件的發(fā)生。這類消息以WM_COMMAND形式發(fā)送,從CCmdTarget派生的類都可以接收這類消息。
CWnd派生于CCmdTarget,從CWnd派生的類可以接收所以類型的消息(View,Frame),其他從CCmdTarget派生的類只能接收命令消息和通告消息(Doc,App)。
基本菜單操作
Pop-up0 Pop-up1 Pop-up2 Pop-up3 …
0-0 1-0 2-0 3-0 …
0-1 1-1 2-1 3-1 …
0-2 1-2 2-2 3-2 …
可以通過CWnd的成員函數(shù)GetMenu來獲取指向菜單欄的指針,對菜單子項(xiàng)的訪問可以通過菜單的索引標(biāo)識來實(shí)現(xiàn)。
操作一個菜單項(xiàng)的2種實(shí)例
1 GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
2 GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_OPEN,MF_BYCOMMAND | MF_CHECKED);
MSDN中關(guān)于MF_BYCOMMAND 和MF_BYPOSITION的解釋
MF_BYCOMMAND Specifies that the parameter gives the command ID of the existing menu item. This is the default.
MF_BYPOSITION Specifies that the parameter gives the position of the existing menu item. The first item is at position 0.
GetSubMenu有很多成員函數(shù),用于菜單的操作。
快捷菜單
工程-添加到工程-Components and Controls,從這里可可以選擇VC提供的一些組件和控件,添加一個POPUP MENU,選擇所屬于View類,此時View類中便添加了一個OnConTextMenu函數(shù)。
01 void CMenuView::OnConTextMenu(CWnd*, CPoint point)
02 {
03 // CG: This block was added by the Pop-up Menu component
04 {
05 if (point.x == -1 && point.y == -1){
06 //keystroke invocation
07 CRect rect;
08 GetClientRect(rect);
09 ClientToScreen(rect);
10 point = rect.TopLeft();
11 point.Offset(5, 5);
12 }
13 CMenu menu;
14 VERIFY(menu.LoadMenu(CG_IDR_POPUP_MENU_VIEW));
15 CMenu* pPopup = menu.GetSubMenu(0);
16 ASSERT(pPopup != NULL);
17 CWnd* pWndPopupOwner = this;
18 while (pWndPopupOwner->GetStyle() & WS_CHILD)
19 pWndPopupOwner = pWndPopupOwner->GetParent();
20 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
21 pWndPopupOwner);
22 }
23 }
運(yùn)行之后,在View類區(qū)域右鍵,會出現(xiàn)一個彈出窗口。
相關(guān)推薦:
2012年計(jì)算機(jī)等考四級數(shù)據(jù)庫工程師備考筆記匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |