TOOLTIPS 的相关用法

来源:互联网 发布:付费语音问答源码 编辑:程序博客网 时间:2024/06/06 17:10

首先 ,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 必须已经申请好空间。

剩下的比较懒 ,有时间 补齐。








0 0
原创粉丝点击