VC菜單與加速鍵

 

VC菜單與加速鍵
1.      Windows消息
Windows中,消息有以下三種類型:
(1)   標準Windows消息:指以WM_爲前綴的那些消息(除了WM_COMMAND),如窗口移動消息WM_MOVE,窗口大小改變消息WM_SIZE,此外,如程序啓動或退出,窗口創建和關閉等等。
(2)   控件通知消息:由編輯框,列表框等控件或子窗口發給其父窗口的通知消息,以WM_COMMAND爲消息名,在消息中包含有控件通知代碼,以區分具體的控件通知消息。
(3)   命令消息:命令消息也以WM_COMMAND爲消息名,在消息中包含有命令的標識符(ID),以區分具體的命令。命令消息的來源是以下三種用戶接口對象:
菜單:用戶選擇某菜單項,要產生相應的命令消息。
工具欄:用戶按下某工具欄按鈕產生相應的命令消息。
加速鍵:用戶在鍵盤上按下了定義的加速鍵也將產生相應的命令消息。
2.創建菜單和加速鍵示例程序
(1) 創建一個SDI工程,名稱是:CMenuExample
(2)打開ResourceView標籤,展開Menu項。添加“我的菜單”,然後在其下面創建兩個子項:ID_MYMENU_HELLOWORLD,“HelloWord&S)”;ID_MYMENU_HELLOC,“HelloVC++&V)”。Prompt中可以添加顯示在狀態條中的提示信息。
(3)ID_MYMENU_HELLOWORLD添加COMMAND消息函數。同時爲ID_MYMENU_HELLOC添加COMMAND消息函數。其實現代碼如下:
void CCMenuExampleView::OnMymenuHelloc()
{
       // TODO: Add your command handler code here
       MessageBox("您點的Hello VC++!","Hello VC++!");
}
 
void CCMenuExampleView::OnMymenuHelloworld()
{
       // TODO: Add your command handler code here
       MessageBox("您點的HelloWorld!","HelloWorld!");
}
(4)   爲上述兩個菜單項添加對應的鍵盤加速鍵。在工作區ResourceView標籤,展開Accelerator項,在IDR_MAINFRAME上雙擊,啓動加速鍵編輯器。在最後的虛框上雙擊鼠標,分別輸入IDKey組合框中輸入或選擇相應的加速鍵。分別爲F11F12。在“HelloWorld&S)”後面加上“/tF11。同理,另一個爲”/tF12”
(5)   下面爲“HelloWorld”添加菜單項的狀態更新處理。爲視圖類加一個成員變量。   BOOL m_hHaveHelloWorld;然後在視圖類的構造函數中初始化次變量如下:
   CCMenuExampleView::CCMenuExampleView()
{
       // TODO: add construction code here
       m_hHaveHelloWorld = TRUE;
 
}
   爲“HelloWorld”菜單項的更新用戶接口對象狀態命令添加消息處理函數。
ID_MYMENU_HELLOWORLD添加UPDATE_COMMAND_UI消息。如下:
void CCMenuExampleView::OnUpdateMymenuHelloworld(CCmdUI* pCmdUI)
{
       // TODO: Add your command update UI handler code here
       pCmdUI->Enable(m_hHaveHelloWorld);
}
   在視圖類中添加改變m_hHaveHelloWorld成員變量值的函數。在這裏我們響應鼠標的左鍵,m_hHaveHelloWorld置爲FALSE,右鍵置爲TRUE。如下:
void CCMenuExampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
       // TODO: Add your message handler code here and/or call default
       MessageBox("Sorry,你不能點這個按鈕了!","Sorry!");
       m_hHaveHelloWorld = FALSE;
 
       CView::OnLButtonDown(nFlags, point);
}
 
void CCMenuExampleView::OnRButtonDown(UINT nFlags, CPoint point)
{
       // TODO: Add your message handler code here and/or call default
       MessageBox("運氣不錯,你可以點此按鈕!","Good Luck!");
       m_hHaveHelloWorld = TRUE;
       CView::OnRButtonDown(nFlags, point);
}
編譯連接運行本程序。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章