TOOLTIPS 的相關用法

首先 ,tooltips的創建:

            

HWND CDlgXXX::CreateToolTip(int toolID, PTSTR pszText)
{
    if (!toolID || !pszText)
    {
        return FALSE;
    }


    HINSTANCE hinst = AfxGetInstanceHandle();
    HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                              WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              GetParent()->m_hWnd, NULL, 
                              hinst, NULL);
   if (!hwndTool || !hwndTip)
   {
       return (HWND)NULL;
   }                              
                              
    TOOLINFO toolInfo = { 0 };
    toolInfo.cbSize = sizeof(toolInfo);
    toolInfo.hwnd = this->m_hWnd;
    toolInfo.uFlags = TTF_SUBCLASS;
    toolInfo.uId = toolID;
    toolInfo.lpszText = pszText;
    SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);

    return hwndTip;
}

這裏說明一下, CreateWindowEx 的參數,第二個參數代表這個CWND 是個 tooltips ,第四個參數設置了tooltips的幾個情況,TTS_ALWAYSTIP 說明tooltips是經常顯示(也就是鼠標移動到上面的時候,就進行顯示),TTS_BALLOON 說明了提示框是個 泡泡形狀 (語言難以描述,各位看客可以試下)。至於其他的參數可以忽略 。都是默認值.


填充TOOLINFO 結構體,通過 發送TTM_ADDTOOL這個消息進行添加tootips。 


這裏需要注意的是  TTF_SUBCLASS 這個參數,這個值是說,不用自己進行處理,系統會自動根據鼠標移動情況進行動態的顯示TOOLTIPS 。

在這裏另外一個比較重要的參數是 : TTF_IDISHWND

說這個參數之前先說兩種 tooltips:

第一種: 控件tooltips ,通俗點說,就是給控件添加tooltips,tooltips 覆蓋了整個控件。這種tooltips 是根據控件的句柄進行區分,TOOLINFO 中的rect 可以不用填寫。

第二種: 區域tooltips,通俗點說,就是給某個特定的區域添加tooltips,tooltips覆蓋了這個區域。這種tooltips 是根據填寫的ID 進行區分,TOOLINFO 中的rect 可以必須進行填寫。此時的uID 可以是定義的任意值,例:#define TOOLTIPS_ID 30000 ,但是要保證唯一性。



TTF_IDISHWND "ID is hWnd".

如果你指定了這個標誌,就意味着你要使用第一種tooltips,則你必須用控件的句柄填充uId成員,

如果你不指定這個成員,就意味着你要使用第二種tooltips,客戶區窗口的一方形區域.在這種情況下,你就必須以方形區域的大小填充rect成員.


之後 再說一下 TOOLINFO 中的lpszText 參數  。 這個參數 可以 填寫 LPSTR_TEXTCALLBACK 這個值,用來進行實時更新tooltips 要顯示的文字信息 。

填寫LPSTR_TEXTCALLBACK之後,每次tooltips 需要顯示的時候都會發送一個TTN_NEEDTEXT消息。 在TTN_NEEDTEXT 消息中可以進行修改顯示的文字信息。



TTN_NEEDTEXT 的使用方法:


ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTip)


afx_msg BOOL OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult);


BOOL CDlgxxxx::OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult)
{
    TOOLTIPTEXT * pTTT = (TOOLTIPTEXT *)pNMHDR;

    UINT uID = pNMHDR->idFrom;

    HWND hWnd = pNMHDR->hwndFrom;

    if(uID == NULL) return FALSE;
    switch(uID)
    {
    case xxx:
        break;
    }
    return TRUE;

這裏可以根據 hwnd 和uid 的不同進行 區分不同的tooltips;



另外在說說 其他的幾個常用的指令 :

所有的指令中 cbSize 是必須填寫的,填寫後,在SendMessage 。否則會失敗。


TTM_ADDTOOL 

wParam
0.
lParam
             TOOLINFO 結構體指針。  

添加一個tooltips ,需要注意的是 TTF_IDISHWND 指令


TTM_DELTOOL

wParam 0.lParam             TOOLINFO 結構體指針。

刪除一個tooltips ,這裏根據 uid 和hwnd 來制定刪除的tooltips 。


TTM_GETTOOLINFO         : 得到當前的TOOLINFO 信息。


TTM_SETTOOLINFO         : 在 發送 這個命令之前一定先 發送TTM_GETTOOLINFO 消息得到 TOOLINFO 之後再進行 發送 set

TTM_UPDATETIPTEXT       : 更新 tipstext 的信息 ,注意穿進去的

lpszText 必須已經申請好空間。

剩下的比較懶 ,有時間 補齊。








發佈了28 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章