翻譯|使用教程|編輯:鮑佳佳|2021-08-05 14:08:08.300|閱讀 193 次
概述:上一節(jié)中講了為Ribbon Bar添加控件的方法。本節(jié)教程將繼續(xù)完善前面的實(shí)例,講解一些稍復(fù)雜的控件的添加方法,及如何為它們添加消息處理函數(shù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上一節(jié)中講了為Ribbon Bar添加控件的方法。本節(jié)教程將繼續(xù)完善前面的實(shí)例,講解一些稍復(fù)雜的控件的添加方法,及如何為它們添加消息處理函數(shù)。
一、為Ribbon Bar添加更多Ribbon控件
將在上一節(jié)實(shí)例的基礎(chǔ)上,繼續(xù)添加下拉菜單、Check Box、Combo Box等Ribbon控件。
1、首先把“Small Button”面板上的“Click”按鈕改造成一個(gè)下拉菜單?!癈lick”按鈕有一個(gè)Behavior屬性Menu Items,默認(rèn)為Empty,選中它右側(cè)會(huì)出現(xiàn)一個(gè)瀏覽按鈕,點(diǎn)擊瀏覽按鈕會(huì)彈出“Items Editor”對(duì)話框,如下圖:
我們可以在上圖Items下的組合框中選擇按鈕、分割線等,點(diǎn)擊組合框右側(cè)的Add按鈕將其添加到下拉菜單中,添加按鈕后在Properties分組中可以設(shè)置Caption(標(biāo)題)、ID、Image(圖片)等屬性。雞啄米這里添加兩個(gè)按鈕,Caption屬性分別為One Click、Double Click,ID分別為ID_ONE_CLICK、ID_DOUBLE_CLICK,Image等屬性就不設(shè)置了。此時(shí)的Ribbon Bar如下圖:
“Click”右側(cè)多了一個(gè)向下的箭頭,運(yùn)行程序后點(diǎn)擊此箭頭會(huì)顯示包含One Click和Double Click按鈕的下拉菜單。另外,上圖中有一個(gè)按鈕雞啄米用紅線指示了其提示信息-“Test Ribbon”,點(diǎn)擊了此按鈕我們就可以不運(yùn)行程序而直接查看Ribbon界面效果。
2、在Small Button面板的右側(cè)再添加一個(gè)面板“More Controls”,然后在Toolbox工具中找到Check Box和Combo Box控件拖入新面板,Check Box的Caption屬性設(shè)為“Websites Enable”,Combo Box的屬性設(shè)為“Websites”。效果圖如下:
我們?yōu)閃ebsites組合框(Combo Box)添加兩個(gè)下拉選項(xiàng),方法是,右鍵點(diǎn)擊Websites組合框,選擇“Properties”,顯示出其屬性頁,修改Data屬性為“www.jizhuomi.com;www.jizhuomi.com/android”,這樣就為此Combo Box添加兩個(gè)網(wǎng)址選項(xiàng)。
二、為Ribbon控件添加消息處理函數(shù)
前面控件都添加好了,接下來我們就為控件添加消息處理函數(shù)。
1、首先為Open按鈕添加單擊事件的消息處理函數(shù),其ID修改為ID_OPEN_BUTTON,然后右鍵點(diǎn)擊Open按鈕,選擇“Add Event Handler”,彈出Event Handler Wizard對(duì)話框,右側(cè)的Class list中選擇“CMainFrame”,左側(cè)的Message Type中選擇“COMMAND”,最后點(diǎn)擊“Add and Edit”按鈕,CMainFrame類中就添加了void CMainFrame::OnOpenButton()成員函數(shù)。
大家可能感覺到了,其實(shí)消息處理函數(shù)的添加過程與以前的普通控件是類似的。最后修改void CMainFrame::OnOpenButton()函數(shù)的函數(shù)實(shí)現(xiàn)如下:
因?yàn)橹皇菫榱酥v解按鈕的消息處理函數(shù)的添加,所以沒有寫復(fù)雜的代碼,只寫了一個(gè)彈出MessageBox的語句。運(yùn)行程序,在結(jié)果界面的Function類別的Big Button面板中,點(diǎn)擊Open按鈕就會(huì)彈出一個(gè)對(duì)話框,并顯示“Open Button!”。
2、我們?cè)贋閃ebsites組合框添加消息處理函數(shù)(方法同上),同樣也為其在CMainFrame類中添加COMMAND消息處理函數(shù)--void CMainFrame::OnWebsitesCombo(),修改此函數(shù)實(shí)現(xiàn)如下:
C++代碼
void CMainFrame::OnWebsitesCombo() { // TODO: Add your command handler code here // 獲取Combo Box控件的指針 CMFCRibbonComboBox* pComboBox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_WEBSITES_COMBO)); // 獲取Combo Box控件當(dāng)前選中項(xiàng)的索引 int nCurSel = pComboBox->GetCurSel(); if (nCurSel >= 0) { // 如果索引大于等于0,則說明有選中項(xiàng),彈出對(duì)話框并顯示選中項(xiàng)的信息 MessageBox(pComboBox->GetItem(nCurSel)); } else { // 如果索引小于0,則說明沒有選中項(xiàng),彈出對(duì)話框提示用戶進(jìn)行選擇 MessageBox(_T("Please select one item!")); } }
運(yùn)行程序,在結(jié)果界面中,改變WebSites組合框的選中項(xiàng),則會(huì)彈出對(duì)話框顯示選中項(xiàng)的信息。如下圖:
3、然后我們?yōu)閃ebsites Enable復(fù)選框添加消息處理函數(shù)。默認(rèn)情況下Check Box控件不會(huì)因?yàn)橛脩舻狞c(diǎn)擊而改變狀態(tài),這就需要我們通過代碼來實(shí)現(xiàn)正常的復(fù)選功能。
我們需要一個(gè)變量保存Check Box的當(dāng)前選中狀態(tài),所以在MainFrm.h文件中為CMainFrame類添加一個(gè)BOOL型的成員變量m_bWebsitesEnable,并在CMainFrame類的構(gòu)造函數(shù)中為其初始化:
C++代碼
CMainFrame::CMainFrame() { // TODO: add member initialization code here theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE); // 初始化為TRUE,即復(fù)選框?yàn)檫x中狀態(tài) m_bWebsitesEnable = TRUE; }
接下來仍然采用1中的方法為Websites Enable復(fù)選框在CMainFrame類中添加COMMAND消息處理函數(shù),并修改其函數(shù)體如下:
C++代碼
void CMainFrame::OnWebsitesCheck() { // TODO: Add your command handler code here // 為m_bWebsitesEnable取反,即切換復(fù)選框的狀態(tài) m_bWebsitesEnable = !m_bWebsitesEnable; }
但是現(xiàn)在復(fù)選框的狀態(tài)只是保存到了變量中,我們還要根據(jù)變量值改變復(fù)選框的顯示狀態(tài),這就需要再為Check Box添加一個(gè)UPDATE_COMMAND_UI消息處理函數(shù),方法仍舊是右鍵點(diǎn)擊Check Box,選擇“Add Event Handler”,在彈出的Event Handler Wizard對(duì)話框的Class list中選擇“CMainFrame”,Message type中則選擇UPDATE_COMMAND_UI,最后點(diǎn)“Add and Edit”,這樣就添加了UPDATE_COMMAND_UI消息處理函數(shù),修改此函數(shù)實(shí)現(xiàn)如下:
C++代碼
void CMainFrame::OnUpdateWebsitesCheck(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here // 根據(jù)當(dāng)前變量值設(shè)置復(fù)選框狀態(tài) pCmdUI->SetCheck(m_bWebsitesEnable); }
這時(shí)你可以試著運(yùn)行下程序,點(diǎn)擊Website Enable復(fù)選框,它已經(jīng)能成功的改變狀態(tài)了。
4、除了以上功能,我們還要實(shí)現(xiàn)一個(gè)稍復(fù)雜的功能,就是如果選中Websites Enable復(fù)選框則激活Websites組合框,而如果取消選中則禁用Websites組合框。這就需要我們?yōu)閃ebsites組合框添加UPDATE_COMMAND_UI消息處理函數(shù)了,添加方法同上,雞啄米這里不再贅述。修改函數(shù)實(shí)現(xiàn)為:
C++代碼
void CMainFrame::OnUpdateWebsitesCombo(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here // 根據(jù)Websites Enable復(fù)選框的狀態(tài)確實(shí)激活還是禁用 pCmdUI->Enable(m_bWebsitesEnable); }
運(yùn)行程序,試著改變Websites Enable復(fù)選框的狀態(tài),Websites組合框的使能狀態(tài)也會(huì)跟著改變。
最后,雞啄米再簡(jiǎn)單講講如何為Ribbon Bar左上角的圓形菜單按鈕和快速訪問工具欄添加新項(xiàng)。
圓形菜單按鈕的屬性頁中有一個(gè)Buttons屬性,可以點(diǎn)擊其右側(cè)瀏覽按鈕彈出Items Editor對(duì)話框,使用該對(duì)話框可以在菜單按鈕的彈出菜單窗口中添加右下角的按鈕。還有一個(gè)Main Items屬性,點(diǎn)其右側(cè)瀏覽按鈕也會(huì)彈出Items Editor對(duì)話框,通過它可以為圓形菜單按鈕添加菜單項(xiàng)。
快速訪問工具欄的屬性頁中有一個(gè)QAT Items屬性,點(diǎn)擊其右側(cè)瀏覽按鈕彈出QAT Items Editor對(duì)話框,使用該對(duì)話框可以在快速訪問工具欄中添加新項(xiàng)。
本節(jié)內(nèi)容有點(diǎn)多,不過并不復(fù)雜,很多都與之前的知識(shí)類似。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn