(一)自定義工具欄 自定義工具欄,,分兩種情況:一是直接添加工具欄,并自己繪制圖標;二是,,添加工具欄,,然后與BMP關聯(lián),與VC6.0中的自定義彩色工具欄類似,。 1,、 自繪工具欄 1)添加Toolbar 資源,并設置工具條ID,如IDR_TOOLBAR1,;編輯工具條,,添加相應的項,設置項的ID,,繪制各自圖標的,。 2)在MainFrm.h中添加Toolbar變量: public: CMFCToolBar m_toolbar1;
3)在MainFrm.cpp中的OnCreate中添加代碼: if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC, CRect(1,1,1,1),IDR_TOOLBAR1) || (!m_ toolbar1.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TOOLBAR1 : 0)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_ toolbar1.SetWindowText(_T("MyToolbar")); ………… m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY); ………… DockPane(&m_ toolbar1);
4)為各項添加各自需要的響應事件即可。 注意,,VS2008中,,沒有VC6.0那樣方便的ClassWizard,所以,,要在CMainFrame的屬性的事件去找,,若項ID與菜單的ID是相關聯(lián),則能在事件列表中找到相應的ID ;否則,,只得靠手動添加響應事件了。 2,、 位圖關聯(lián)工具欄 1)添加Toolbar 資源,,并設置工具條ID,如IDR_TOOLBAR1;編輯工具條,,添加相應的項,,設置項的ID,繪制各自圖標的,。 2)導入自己的位圖資源,,,ID設為:IDB_BITMAP_TOOLBAR 3)在MainFrm.h中添加Toolbar變量: public: CMFCToolBar m_toolbar1;
4)在MainFrm.cpp中的OnCreate中添加代碼: if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC, CRect(1,1,1,1),IDR_TOOLBAR1) || (!m_ toolbar1.LoadToolBar(IDR_TOOLBAR1,0,,0,,TRUE,0,0,IDB_BITMAP_TOOLBAR)) //與前面方法的區(qū)別在此 { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_ toolbar1.SetWindowText(_T("MyToolbar")); ………… m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY); ………… DockPane(&m_ toolbar1);
5)為各項添加各自需要的響應事件即可。 (二) 在工具欄上添加組合框 在網(wǎng)上查找到的資料: VC2008在CMFCToolBar工具欄中加入組合框:(這種方法,,我沒實現(xiàn)了) http://hi.baidu.com/zll2117/blog/item/80792e0fe5ce3ad87bcbe1c9.html VC 2010:CMFCToolbar工具條中加入組合框 :(利用這種方法,,實現(xiàn)了我所要求的功能) http://zhanyonhu.blog.163.com/blog/static/161860442010111595752929/ 總結得出,在工具欄上添加組合框的操作如下: 1)自定義ComboBox的ID,。在Resource.h中定義為(自己手動添加的定義) #define IDR_COM 32800
2)在MainFrm.h中添加工具欄組合框指針變量: public: CMFCToolBarComboBoxButton *m_comboButton;
3)在MainFrm.cpp中的OnCreate中添加代碼: ………… m_comboButton = new CMFCToolBarComboBoxButton(IDR_COM,, GetCmdMrg()->GetCmdImage(IDR_COM,FALSE),// 工具條位圖中的圖像序號 CBS_DROPDOWNLIST, //組合框類型 100); //組合框的寬度 m_ comboButton->EnableWindow(TRUE); m_ comboButton->SetCenterVert(); m_ comboButton->SetDropDownHeight(100);//設置下拉列表的高度 m_ comboButton->SetFlatMode(); //添加內(nèi)容 m_ comboButton->AddItem(_T(“Once”)); m_ comboButton->AddItem(_T(“If Only”)); m_ comboButton->AddItem(_T(“P.S.I Love You”)); m_ comboButton->AddItem(_T(“Love Me If You Dare”)); m_ comboButton->SelectItem(0);//默認選中 //添加到工具欄 m_wndToolBar.InsertSeparator();//先添加分隔條 m_wndToolBar.InsertButton(m_ comboButton); //在使用中,遇到這個情況,,MSDN中InsertButton為public成員函數(shù),,而在CMFCToolBar類的聲明中卻為protected成員,,我解決的方法是把它改為public成員。目前我沒有找其他解決方法,。若以后找到,,再更新。 …………
4)添加響應 1)在MainFrm.h中添加: afx_msg void OnSelChangeClick();//SEL_CHANGE afx_msg void OnClickComboBox();//ON_COMMAND
2)在MainFrm.cpp中添加消息映射和消息響應函數(shù) …… ON_CBN_SELCHANGE(IDR_COM, &CMainFrame::OnSelChangeClick) ON_COMMAND(IDR_COM, &CMainFrame::OnClickComboBox) END_MESSAGE_MAP()
void CMainFrame::OnSelChangeClick() { //可以添加需要處理的代碼 } void CMainFrame::OnClickComboBox() { //不做任何處理,,但必須添加,,否則組合框是灰色不可用的 }
|