【MFC】带下拉菜单的工具栏
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發(fā)環(huán)境
- 03. 關(guān)鍵技術(shù)
- 04. 程序設(shè)計
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
本實例是對工具欄功能的擴充,可以將工具欄上按鈕的并列項以菜單的形式顯示,方便用戶操作。運行程序,單擊工具欄按鈕旁邊的下三角按鈕,將彈出一個下拉菜單,如下圖所示。
02. 開發(fā)環(huán)境
系統(tǒng)環(huán)境:Windows 10
開發(fā)環(huán)境:Visual Studio 2019
03. 關(guān)鍵技術(shù)
下三角按鈕是通過CToolBar類的SetButtonStyle方法和CToolBarCtrl類的SetExtendedStyle方法實現(xiàn)的。
SetButtonStyle方法主要用來設(shè)置工具欄按鈕的風(fēng)格,語法如下:
void SetButtonStyle( int nIndex, UINT nStyle );參數(shù)說明nIndex:按鈕的索引。nStyle:按鈕的風(fēng)格。可以有以下取值。TBBS_BUTTON:標(biāo)準(zhǔn)按鈕。TBBS_SEPARATOR:分隔線。TBBS_CHECKBOX:復(fù)選風(fēng)格。TBBS_GROUP:按鈕組。TBBS_CHECKGROUP:復(fù)選按鈕組。SetExtendedStyle方法用于設(shè)置工具欄控件的擴展風(fēng)格,語法如下:
DWORD SetExtendedStyle( DWORD dwExStyle ) const; 參數(shù)說明dwExStyle:系統(tǒng)定義的工具欄控件風(fēng)格,取值TBSTYLE_EX_DRAWDDARROWS,可以實現(xiàn)下三角按鈕功能。04. 程序設(shè)計
4.1 在OnCreate函數(shù)中針對創(chuàng)建的Toolbar獲取到對應(yīng)的按鈕屬性,并設(shè)置為具有下拉風(fēng)格
//設(shè)置工具欄有下拉按鈕m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);//獲得添加下拉按鈕的工具欄打開按鈕風(fēng)格DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));//添加下拉按鈕風(fēng)格dwStyle |= TBSTYLE_DROPDOWN;m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);4.2 創(chuàng)建你點擊Toolbar上對應(yīng)的按鈕后需要下拉的菜單欄,插入新的Resouse:Menu,在這里我新建的Menu它的ID是ID_DRAW_LINE
4.3 在CMainFrame類的消息映射中(即MainFrm.cpp )加入下拉箭頭的ID_DRAW_LINE消息映射
此消息映射需要手動添加,添加步驟
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)//此行即為新增的ON_NOTIFY消息映射ON_COMMAND(ID_TEST_32771, &CMainFrame::OnTest32771)ON_COMMAND(ID_TEST_32772, &CMainFrame::OnTest32772) END_MESSAGE_MAP()4.4 在MainFrame.h頭文件中加入消息處理函數(shù)的聲明:
afx_msg void OnToolbarDropDown(NMHDR* pnmhdr, LRESULT* plRes);4.5 在MainFrame.cpp中實現(xiàn)消息處理函數(shù)和添加響應(yīng)處理函數(shù)
// CMainFrame 消息處理程序 void CMainFrame::OnToolbarDropDown(NMHDR* pnmhdr, LRESULT* plRes) {LPNMTOOLBAR pnmh = reinterpret_cast<LPNMTOOLBAR>(pnmhdr);CWnd* pWnd;switch (pnmh->iItem){case ID_FILE_OPEN:pWnd = &m_wndToolBar;break;default://此處必須寫return 否則在vs2019中會報錯return;}//pWnd = &m_wndToolBar;CMenu menu;//加載菜單資源menu.LoadMenuW(ID_DRAW_LINE);//獲得子菜單CMenu* pPopub = menu.GetSubMenu(0);ASSERT(pPopub);CRect rect;//獲得區(qū)域pWnd->SendMessage(TB_GETRECT, pnmh->iItem, (LPARAM)&rect);pWnd->ClientToScreen(&rect);pPopub->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rect.left, rect.bottom, this, &rect); }void CMainFrame::OnTest32771() {// TODO: 在此添加命令處理程序代碼MessageBox(TEXT("Release")); }void CMainFrame::OnTest32772() {// TODO: 在此添加命令處理程序代碼MessageBox(TEXT("Debug")); }05. 秘笈心法
06. 源碼下載
下載:【MFC】帶下拉菜單的工具欄.rar
07. 附錄
總結(jié)
以上是生活随笔為你收集整理的【MFC】带下拉菜单的工具栏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】滚动字幕的状态栏
- 下一篇: 【MFC】工具栏按钮追加显示文本