TOOLTIPS 的相关用法

本文详细介绍了Windows中TOOLTIPS的创建和使用,包括TTF_SUBCLASS参数的作用,以及TTF_IDISHWND区分控件和区域TOOLTIPS的方式。重点讲解了如何动态更新TOOLTIPS文本,利用TTN_NEEDTEXT消息处理显示文字,并提供了示例代码展示如何响应此消息。同时,提到了TTM_ADDTOOL和TTM_DELTOOL等关键API的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值