CToolTipCtrl的使用(Using CToolTipCtrl--VS2010)

CToolTipCtrl類封裝了ToolTip控件的功能,是一個顯示單行文字用來描述應用程序裏一個工具的用途的小彈出式窗口。ToolTip窗口是隱藏的,只有當光標放在一個工具上並且停留大約1.5秒纔會顯示出來。ToolTip出現在光標附近,用戶點擊了鼠標鍵或者移動了光標,工具提示窗口就會消失。
  • 創建工具提示的方法
        MS提供了三個類用於創建和管理ToolTip控件,CWnd,CToolBarCtrl,CToolBarCtrl和CMFCToolTipCtrl。這些類中的工具提示成員函數隱藏了Windows通用控件API,CToolBarCtrl和CToolBarCtrl類繼承於Cwnd.
        CWnd提供了四個成員函數用於創建和管理ToolTip: EnableToolTipsCancelToolTipsFilterToolTipMessageOnToolHitTest。想了解更多ToolTips是如何實現的,可以查看這幾個成員函數。
        如果你用CToolBarCtrl創建了一個工具欄,你可以使用下面的成員函數直接實現這個工具欄的ToolTips:GetToolTips和SetToolTips。想了解更多ToolTips是如何實現的,可以查看這幾個成員函數和工具提示通告消息的處理。
        CToolTipCtrl類提供了Windows通用ToolTip控件的功能,一個ToolTip控件可以給一個或者更多工具提供信息。一個ToolTip也是一個窗口,就像一個子窗口、一個控件或者是一個由程序在窗口客戶區定義的一個矩形區域。CMFCToolTipCtrl繼承自CToolTipCtrl,提供了更多的視覺風格和功能。
  • ToolTip控件的設置
    ToolTip控件激活或者不激活。當你設置它激活時,ToolTip控件在光標放在工具上時就會顯示。設置爲非激活狀態時,ToolTip控件不會出現即使光標放在了一個工具上。調用Activate()激活或關閉一個TooTip控件。

通過設置TTS_ALWAYSTIP風格,你可以讓一個激活的ToolTip控件在光標放在一個工具上時顯示工具提示,不用理會擁有ToolTip控件的窗口是否處於激活狀態。如果你沒有使用這個風格,toolTip控件只會在父窗口激活的時候出現,沒有激活時則不會出現。

大多數的應用程序包含對應於菜單命令的包含一些工具的工具欄。對這些工具,ToolTip控件顯示和菜單項相一致的內容,這無疑會很方便。系統自動從傳遞給ToolTip控件的所有字符串中分離&加速字符,除非你使用了TTS_NOPREFIX風格(無前綴)。


  • 使用CToolTipCtrl創建和控制一個CToolTipCtrl對象
  1. 構造一個CToolTipCtrl對象。
  2. 調用Create創建窗口工具提示通用控件並附加到創建的CToolTipCtrl對象。
  3. 調用AddTool給工具提示控件控件註冊一個工具,這樣當光標移動到這個工具上時就會顯示存儲在工具提示裏的信息。
  4. 調用SetToolInfo設置工具提示爲某個工具保存的信息。
  5. 調用SetToolRect爲工具設置新的矩形邊界。
  6. 調用HitTest測試一個點是否在給定工具的矩形邊界內,如果是則返回工具的信息。
  7. 調用GetToolCount獲取已註冊到工具提示的工具數量。
  •     控制工具提示控件
    CToolTipCtrl類提供了一組成員函數用來控制CToolTipCtrl對象的各種屬性和工具提示窗口。
可以調用GetDelayTime和SetDelayTime獲取和設置工具提示窗口的初始化、彈出、重畫間隔。使用以下的函數改變工具提示窗口的外觀。
                GetMargin和SetMargin  獲取和設置工具提示邊框與提示文本的間隔寬度。
                GetMaxTipWidth和SetMaxTipWidth 獲取和設置工具提示窗口的最大寬度
                GetTipBkColor和SetTipBkColor 獲取和設置工具提示窗口的背景顏色
                GetTipTextColor和SetTipTextColor 獲取和設置工具提示窗口文本顏色
    爲 了使工具提示控件接收到重要的消息,例如WM_LBUTTONXXX消息,你必須把消息傳遞給工具提示控件。最好的方法是在所有者窗口的PreTranslateMessage函數中調用CToolTipCtrl::RelayEvent,下面的例子闡述了一個可用的方法(假設工具提示控件爲m_ToolTip)。
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message== WM_LBUTTONDOWN ||
          pMsg->message== WM_LBUTTONUP ||
          pMsg->message== WM_MOUSEMOVE)
       {
          m_ToolTipCtrl.RelayEvent(pMsg);
       }
 
    return  CDialog::PreTranslateMessage(pMsg);
}
調用Pop成員函數,立即移除一個視圖裏的工具提示窗口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章