日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】带下拉菜单的工具栏

發布時間:2024/4/24 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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】带下拉菜单的工具栏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。