VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

上一節中雞啄米講了爲Ribbon Bar添加控件的方法。本節教程雞啄米將繼續完善前面的實例,講解一些稍複雜的控件的添加方法,及如何爲它們添加消息處理函數。

       一、爲Ribbon Bar添加更多Ribbon控件

       雞啄米將在上一節實例的基礎上,繼續添加下拉菜單、Check Box、Combo Box等Ribbon控件。

       1、首先把“Small Button”面板上的“Click”按鈕改造成一個下拉菜單。“Click”按鈕有一個Behavior屬性Menu Items,默認爲Empty,選中它右側會出現一個瀏覽按鈕,點擊瀏覽按鈕會彈出“Items Editor”對話框,如下圖:

VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

       我們可以在上圖Items下的組合框中選擇按鈕、分割線等,點擊組合框右側的Add按鈕將其添加到下拉菜單中,添加按鈕後在Properties分組中可以設置Caption(標題)、ID、Image(圖片)等屬性。雞啄米這裏添加兩個按鈕,Caption屬性分別爲One Click、Double Click,ID分別爲ID_ONE_CLICK、ID_DOUBLE_CLICK,Image等屬性就不設置了。此時的Ribbon Bar如下圖:

VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

       “Click”右側多了一個向下的箭頭,運行程序後點擊此箭頭會顯示包含One Click和Double Click按鈕的下拉菜單。另外,上圖中有一個按鈕雞啄米用紅線指示了其提示信息-“Test Ribbon”,點擊了此按鈕我們就可以不運行程序而直接查看Ribbon界面效果。

        2、在Small Button面板的右側再添加一個面板“More Controls”,然後在Toolbox工具中找到Check Box和Combo Box控件拖入新面板,Check Box的Caption屬性設爲“Websites Enable”,Combo Box的屬性設爲“Websites”。效果圖如下:

VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

       我們爲Websites組合框(Combo Box)添加兩個下拉選項,方法是,右鍵點擊Websites組合框,選擇“Properties”,顯示出其屬性頁,修改Data屬性爲“www.jizhuomi.com;www.jizhuomi.com/android”,這樣就爲此Combo Box添加兩個網址選項。

       二、爲Ribbon控件添加消息處理函數

       前面控件都添加好了,接下來我們就爲控件添加消息處理函數。

       1、首先爲Open按鈕添加單擊事件的消息處理函數,其ID修改爲ID_OPEN_BUTTON,然後右鍵點擊Open按鈕,選擇“Add Event Handler”,彈出Event Handler Wizard對話框,右側的Class list中選擇“CMainFrame”,左側的Message Type中選擇“COMMAND”,最後點擊“Add and Edit”按鈕,CMainFrame類中就添加了void CMainFrame::OnOpenButton()成員函數。

       大家可能感覺到了,其實消息處理函數的添加過程與以前的普通控件是類似的。最後修改void CMainFrame::OnOpenButton()函數的函數實現如下:

C++代碼
  1. void CMainFrame::OnOpenButton()   
  2. {   
  3.     // TODO: Add your command handler code here   
  4.     MessageBox(_T("Open Button!"));   // 彈出對話框,提示“Open Button!”   
  5. }  

       因爲只是爲了講解按鈕的消息處理函數的添加,所以沒有寫複雜的代碼,只寫了一個彈出MessageBox的語句。運行程序,在結果界面的Function類別的Big Button面板中,點擊Open按鈕就會彈出一個對話框,並顯示“Open Button!”。

       2、我們再爲Websites組合框添加消息處理函數(方法同上),同樣也爲其在CMainFrame類中添加COMMAND消息處理函數--void CMainFrame::OnWebsitesCombo(),修改此函數實現如下:

C++代碼
  1. void CMainFrame::OnWebsitesCombo()   
  2. {   
  3.     // TODO: Add your command handler code here   
  4.     // 獲取Combo Box控件的指針   
  5.     CMFCRibbonComboBox* pComboBox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_WEBSITES_COMBO));   
  6.     // 獲取Combo Box控件當前選中項的索引   
  7.     int nCurSel = pComboBox->GetCurSel();   
  8.   
  9.     if (nCurSel >= 0)   
  10.     {   
  11.         // 如果索引大於等於0,則說明有選中項,彈出對話框並顯示選中項的信息   
  12.         MessageBox(pComboBox->GetItem(nCurSel));   
  13.     }   
  14.     else  
  15.     {   
  16.         // 如果索引小於0,則說明沒有選中項,彈出對話框提示用戶進行選擇   
  17.         MessageBox(_T("Please select one item!"));   
  18.     }   
  19. }  

       運行程序,在結果界面中,改變WebSites組合框的選中項,則會彈出對話框顯示選中項的信息。如下圖:

VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

       3、然後我們爲Websites Enable複選框添加消息處理函數。默認情況下Check Box控件不會因爲用戶的點擊而改變狀態,這就需要我們通過代碼來實現正常的複選功能。

       我們需要一個變量保存Check Box的當前選中狀態,所以在MainFrm.h文件中爲CMainFrame類添加一個BOOL型的成員變量m_bWebsitesEnable,並在CMainFrame類的構造函數中爲其初始化:

C++代碼
  1. CMainFrame::CMainFrame()   
  2. {   
  3.     // TODO: add member initialization code here   
  4.     theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);   
  5.     // 初始化爲TRUE,即複選框爲選中狀態   
  6.     m_bWebsitesEnable = TRUE;   
  7. }  

       接下來仍然採用1中的方法爲Websites Enable複選框在CMainFrame類中添加COMMAND消息處理函數,並修改其函數體如下:

C++代碼
  1. void CMainFrame::OnWebsitesCheck()   
  2. {   
  3.     // TODO: Add your command handler code here   
  4.     // 爲m_bWebsitesEnable取反,即切換複選框的狀態   
  5.     m_bWebsitesEnable = !m_bWebsitesEnable;   
  6. }  

       但是現在複選框的狀態只是保存到了變量中,我們還要根據變量值改變複選框的顯示狀態,這就需要再爲Check Box添加一個UPDATE_COMMAND_UI消息處理函數,方法仍舊是右鍵點擊Check Box,選擇“Add Event Handler”,在彈出的Event Handler Wizard對話框的Class list中選擇“CMainFrame”,Message type中則選擇UPDATE_COMMAND_UI,最後點“Add and Edit”,這樣就添加了UPDATE_COMMAND_UI消息處理函數,修改此函數實現如下:

C++代碼
  1. void CMainFrame::OnUpdateWebsitesCheck(CCmdUI *pCmdUI)   
  2. {   
  3.     // TODO: Add your command update UI handler code here   
  4.     // 根據當前變量值設置複選框狀態   
  5.     pCmdUI->SetCheck(m_bWebsitesEnable);   
  6. }  

       這時你可以試着運行下程序,點擊Website Enable複選框,它已經能成功的改變狀態了。

       4、除了以上功能,我們還要實現一個稍複雜的功能,就是如果選中Websites Enable複選框則激活Websites組合框,而如果取消選中則禁用Websites組合框。這就需要我們爲Websites組合框添加UPDATE_COMMAND_UI消息處理函數了,添加方法同上,雞啄米這裏不再贅述。修改函數實現爲:

C++代碼
  1. void CMainFrame::OnUpdateWebsitesCombo(CCmdUI *pCmdUI)   
  2. {   
  3.     // TODO: Add your command update UI handler code here   
  4.     // 根據Websites Enable複選框的狀態確實激活還是禁用   
  5.     pCmdUI->Enable(m_bWebsitesEnable);   
  6. }  

        運行程序,試着改變Websites Enable複選框的狀態,Websites組合框的使能狀態也會跟着改變。

        最後,雞啄米再簡單講講如何爲Ribbon Bar左上角的圓形菜單按鈕和快速訪問工具欄添加新項。

VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件併爲控件添加消息處理函數)

       圓形菜單按鈕的屬性頁中有一個Buttons屬性,可以點擊其右側瀏覽按鈕彈出Items Editor對話框,使用該對話框可以在菜單按鈕的彈出菜單窗口中添加右下角的按鈕。還有一個Main Items屬性,點其右側瀏覽按鈕也會彈出Items Editor對話框,通過它可以爲圓形菜單按鈕添加菜單項。

       快速訪問工具欄的屬性頁中有一個QAT Items屬性,點擊其右側瀏覽按鈕彈出QAT Items Editor對話框,使用該對話框可以在快速訪問工具欄中添加新項。

       本節內容有點多,不過並不複雜,很多都與之前的知識類似。最後雞啄米歡迎大家常回本站看看。




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