【MFC】带下拉菜单的工具栏
生活随笔
收集整理的這篇文章主要介紹了
【MFC】带下拉菜单的工具栏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發環境
- 03. 關鍵技術
- 04. 程序設計
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
本實例是對工具欄功能的擴充,可以將工具欄上按鈕的并列項以菜單的形式顯示,方便用戶操作。運行程序,單擊工具欄按鈕旁邊的下三角按鈕,將彈出一個下拉菜單,如下圖所示。
02. 開發環境
系統環境:Windows 10
開發環境:Visual Studio 2019
03. 關鍵技術
下三角按鈕是通過CToolBar類的SetButtonStyle方法和CToolBarCtrl類的SetExtendedStyle方法實現的。
SetButtonStyle方法主要用來設置工具欄按鈕的風格,語法如下:
void SetButtonStyle( int nIndex, UINT nStyle );參數說明nIndex:按鈕的索引。nStyle:按鈕的風格。可以有以下取值。TBBS_BUTTON:標準按鈕。TBBS_SEPARATOR:分隔線。TBBS_CHECKBOX:復選風格。TBBS_GROUP:按鈕組。TBBS_CHECKGROUP:復選按鈕組。SetExtendedStyle方法用于設置工具欄控件的擴展風格,語法如下:
DWORD SetExtendedStyle( DWORD dwExStyle ) const; 參數說明dwExStyle:系統定義的工具欄控件風格,取值TBSTYLE_EX_DRAWDDARROWS,可以實現下三角按鈕功能。04. 程序設計
4.1 在OnCreate函數中針對創建的Toolbar獲取到對應的按鈕屬性,并設置為具有下拉風格
//設置工具欄有下拉按鈕m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);//獲得添加下拉按鈕的工具欄打開按鈕風格DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));//添加下拉按鈕風格dwStyle |= TBSTYLE_DROPDOWN;m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);4.2 創建你點擊Toolbar上對應的按鈕后需要下拉的菜單欄,插入新的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頭文件中加入消息處理函數的聲明:
afx_msg void OnToolbarDropDown(NMHDR* pnmhdr, LRESULT* plRes);4.5 在MainFrame.cpp中實現消息處理函數和添加響應處理函數
// 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;//獲得區域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. 附錄
總結
以上是生活随笔為你收集整理的【MFC】带下拉菜单的工具栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】滚动字幕的状态栏
- 下一篇: 【MFC】工具栏按钮追加显示文本