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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】具有提示功能的工具栏

發(fā)布時間:2024/4/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MFC】具有提示功能的工具栏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 案例概述
    • 02. 開發(fā)環(huán)境
    • 03. 關(guān)鍵技術(shù)
    • 04. 程序設(shè)計
    • 05. 秘笈心法
    • 06. 源碼下載
    • 07. 附錄

01. 案例概述

在文檔\視圖結(jié)構(gòu)的應(yīng)用程序中,默認情況下,當(dāng)鼠標(biāo)在工具欄按鈕上停留片刻,會出現(xiàn)一個工具提示條。那么在基于對話框的應(yīng)用程序中能夠?qū)崿F(xiàn)該功能嗎?運行本案例,將鼠標(biāo)移至工具欄上的某一按鈕上,即可看到該工具按鈕的提示信息,效果如下圖所示。

02. 開發(fā)環(huán)境

系統(tǒng)環(huán)境:Windows 10

開發(fā)環(huán)境:Visual Studio 2019

03. 關(guān)鍵技術(shù)

使工具欄具有提示功能,需要同時具備幾個條件。一是工具欄具有CBRS_TOOLTIPS風(fēng)格,二是工具欄的父窗口需要處理TTN_NEEDTEXT通知消息。在MFC類庫中,CFrameWnd默認處理了TTN_NEEDTEXT通知消息,因此,在文檔\視圖結(jié)構(gòu)的應(yīng)用程序中,只要工具欄具有CBRS_TOOLTIPS風(fēng)格,就能夠顯示提示信息。

如果在對話框中添加TTN_NEEDTEXT通知消息,需要在消息映射部分添加如下代碼:

ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)

其中,OnToolTipNotify是處理TTN_NEEDTEXT消息的函數(shù),函數(shù)原型如下:

OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)

參數(shù)說明:

參數(shù)id是發(fā)送消息的控件ID,但此處沒有用,因為控件ID可以來自于pNMHDR。

參數(shù)pNMHDR是一個NMHDR(實際應(yīng)該是NMTTDISPINFO結(jié)構(gòu)指針)結(jié)構(gòu)指針,NMHDR結(jié)構(gòu)記錄了發(fā)送消息的控件ID、句柄等信息。

參數(shù)pResult表示結(jié)果代碼指針,TTN_NEEDTEXT消息可以忽略該參數(shù)。

04. 程序設(shè)計

(1)新建一個基于對話框的工程。

(2)在對話框類中定義一個CToolBar變量m_ToolBar。在工作區(qū)的資源視圖中創(chuàng)建一個工具欄資源。

(3)在對話框的OnInitDialog方法中創(chuàng)建工具欄。

(4)在對話框的消息映射部分添加TTN_NEEDTEXT消息映射宏。

(5)向?qū)υ捒蛑刑砑覱nToolTipNotify方法,代碼如下:

頭文件

// CMy4ToolDlg 對話框 class CMy4ToolDlg : public CDialogEx { // 構(gòu)造 public:CMy4ToolDlg(CWnd* pParent = nullptr); // 標(biāo)準(zhǔn)構(gòu)造函數(shù)CToolBar m_ToolBar;CString m_Str;// 對話框數(shù)據(jù) #ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MY4TOOL_DIALOG }; #endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 實現(xiàn) protected:HICON m_hIcon;// 生成的消息映射函數(shù)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);DECLARE_MESSAGE_MAP() };

源文件

BEGIN_MESSAGE_MAP(CMy4ToolDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify) END_MESSAGE_MAP()BOOL CMy4ToolDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關(guān)于...”菜單項添加到系統(tǒng)菜單中。// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設(shè)置此對話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)// TODO: 在此添加額外的初始化代碼UINT array[10];for (int i = 0; i < 10; i++){if (i == 3 || i == 7)array[i] = ID_SEPARATOR; //第4、8個按鈕為分隔條elsearray[i] = i + 1001;}m_ToolBar.Create(this);m_ToolBar.SetButtons(array, 10);m_ToolBar.SetButtonText(0, TEXT("新建"));m_ToolBar.SetButtonText(1, TEXT("打開"));m_ToolBar.SetButtonText(2, TEXT("保存"));m_ToolBar.SetButtonText(4, TEXT("剪切"));m_ToolBar.SetButtonText(5, TEXT("復(fù)制"));m_ToolBar.SetButtonText(6, TEXT("粘貼"));m_ToolBar.SetButtonText(8, TEXT("打印"));m_ToolBar.SetButtonText(9, TEXT("幫助"));m_ToolBar.LoadBitmap(IDB_BITMAP1); //加載位圖m_ToolBar.SetSizes(CSize(36, 36), CSize(16, 16)); //設(shè)置按鈕和按鈕位圖大小m_ToolBar.EnableToolTips(TRUE);RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //顯示工具欄return TRUE; // 除非將焦點設(shè)置到控件,否則返回 TRUE }BOOL CMy4ToolDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult) {TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;//獲取工具欄按鈕IDUINT nId = pNMHDR->idFrom;//根據(jù)ID獲取按鈕索引int index = m_ToolBar.GetToolBarCtrl().CommandToIndex(nId);//根據(jù)索引獲取按鈕文本m_ToolBar.GetButtonText(index, m_Str);//設(shè)置顯示的提示信息pTTT->lpszText = m_Str.GetBuffer(0);pTTT->hinst = AfxGetResourceHandle();return TRUE;}

05. 秘笈心法

信息提示的實現(xiàn)

信息提示的方法有很多,實例中使用的是處理TTN_NEEDTEXT消息的方法,同樣還可以使用ctooltip控件的方法來實現(xiàn)提示效果。

06. 源碼下載

下載:【MFC】具有提示功能的工具欄.rar

07. 附錄

參考: 《Visual C++從入門到精通(項目案例版)》

總結(jié)

以上是生活随笔為你收集整理的【MFC】具有提示功能的工具栏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。