MFC 具有提示功能的工具欄

2021-10-21 06:16:15 字數 3635 閱讀 2490

在文件\檢視結構的應用程式中,預設情況下,當滑鼠在工具欄按鈕上停留片刻,會出現乙個工具提示條。那麼在基於對話方塊的應用程式中能夠實現該功能嗎?執行本案例,將滑鼠移至工具欄上的某一按鈕上,即可看到該工具按鈕的提示資訊,效果如下圖所示。

系統環境:windows 10

開發環境:visual studio 2019

使工具欄具有提示功能,需要同時具備幾個條件。一是工具欄具有cbrs_tooltips風格,二是工具欄的父視窗需要處理ttn_needtext通知訊息。在mfc類庫中,cframewnd預設處理了ttn_needtext通知訊息,因此,在文件\檢視結構的應用程式中,只要工具欄具有cbrs_tooltips風格,就能夠顯示提示資訊。

如果在對話方塊中新增ttn_needtext通知訊息,需要在訊息對映部分新增如下**:

on_notify_ex( ttn_needtext, 0, ontooltipnotify)

其中,ontooltipnotify是處理ttn_needtext訊息的函式,函式原型如下:

ontooltipnotify(uint id, nmhdr *pnmhdr, lresult *presult)

引數說明:

引數id是傳送訊息的控制項id,但此處沒有用,因為控制項id可以來自於pnmhdr。

引數pnmhdr是乙個nmhdr(實際應該是nmttdispinfo結構指標)結構指標,nmhdr結構記錄了傳送訊息的控制項id、控制代碼等資訊。

引數presult表示結果**指標,ttn_needtext訊息可以忽略該引數。

(1)新建乙個基於對話方塊的工程。

(2)在對話方塊類中定義乙個c*******變數m_*******。在工作區的資源檢視中建立乙個工具欄資源。

(3)在對話方塊的oninitdialog方法中建立工具欄。

(4)在對話方塊的訊息對映部分新增ttn_needtext訊息對映巨集。

(5)向對話方塊中新增ontooltipnotify方法,**如下:

標頭檔案

// cmy4tooldlg 對話方塊

class cmy4tooldlg : public cdialogex

;#endif

protected:

virtual void

dodataexchange

(cdataexchange* pdx)

;// ddx/ddv 支援

// 實現

protected:

hicon m_hicon;

// 生成的訊息對映函式

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()

}// 設定此對話方塊的圖示。 當應用程式主視窗不是對話方塊時,框架將自動

// 執行此操作

seticon

(m_hicon, true)

;// 設定大圖示

seticon

(m_hicon, false)

;// 設定小圖示

// todo: 在此新增額外的初始化**

uint array[10]

;for

(int i =

0; i <

10; i++

) m_*******.

create

(this)

; m_*******.

setbuttons

(array,10)

; m_*******.

setbuttontext(0

,text

("新建"))

; m_*******.

setbuttontext(1

,text

("開啟"))

; m_*******.

setbuttontext(2

,text

("儲存"))

; m_*******.

setbuttontext(4

,text

("剪下"))

; m_*******.

setbuttontext(5

,text

("複製"))

; m_*******.

setbuttontext(6

,text

("貼上"))

; m_*******.

setbuttontext(8

,text

("列印"))

; m_*******.

setbuttontext(9

,text

("幫助"))

; m_*******.

loadbitmap

(idb_bitmap1)

;//載入位圖

m_*******.

setsizes

(csize(36

,36),

csize(16

,16))

;//設定按鈕和按鈕位圖大小

m_*******.

enabletooltips

(true)

;repositionbars

(afx_idw_controlbar_first, afx_idw_controlbar_last,0)

;//顯示工具欄

return true;

// 除非將焦點設定到控制項,否則返回 true

}bool cmy4tooldlg:

:ontooltipnotify

(uint id, nmhdr* pnmhdr, lresult* presult)

資訊提示的實現

資訊提示的方法有很多,例項中使用的是處理ttn_needtext訊息的方法,同樣還可以使用ctooltip控制項的方法來實現提示效果。

參考: 《visual c++從入門到精通(專案案例版)》

MFC工具欄程式設計

竅門 1 要在工具欄增加乙個分割欄,只要拖動某乙個按鈕稍稍往右移動一點便可以了。2 要刪除乙個工具欄按鈕,只要點住它,把它拖出工具欄即可。1 在窗體的右邊新建乙個工具欄。首先,在resourceview中的 右鍵選擇insert 新建乙個工具欄idr 1。畫上幾個按鈕。然後再mainframe中新增...

MFC工具欄程式設計

竅門 1 要在工具欄增加乙個分割欄,只要拖動某乙個按鈕稍稍往右移動一點便可以了。2 要刪除乙個工具欄按鈕,只要點住它,把它拖出工具欄即可。1 在窗體的右邊新建乙個工具欄。首先,在resourceview中的 右鍵選擇insert 新建乙個工具欄idr 1。畫上幾個按鈕。然後再mainframe中新增...

MFC工具欄按鈕下拉

1.首先在cmainframe oncreate 函式下新增如下 讓工具欄有下拉能力和向下的箭頭按鈕 讓工具欄具有處理下拉箭頭的能力 dword dwexstyle tbstyle ex drawddarrows m wnd get ctrl sendmessage tb setextendedst...