在文件\檢視結構的應用程式中,預設情況下,當滑鼠在工具欄按鈕上停留片刻,會出現乙個工具提示條。那麼在基於對話方塊的應用程式中能夠實現該功能嗎?執行本案例,將滑鼠移至工具欄上的某一按鈕上,即可看到該工具按鈕的提示資訊,效果如下圖所示。
系統環境: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)(1)新建乙個基於對話方塊的工程。引數說明:
引數id是傳送訊息的控制項id,但此處沒有用,因為控制項id可以來自於pnmhdr。
引數pnmhdr是乙個nmhdr(實際應該是nmttdispinfo結構指標)結構指標,nmhdr結構記錄了傳送訊息的控制項id、控制代碼等資訊。
引數presult表示結果**指標,ttn_needtext訊息可以忽略該引數。
(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...