首先 ,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.
lParamTOOLINFO 结构体指针。  

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

TTM_DELTOOL

wParam

0.

lParamTOOLINFO 结构体指针。

删除一个tooltips ,这里根据 uid 和hwnd 来制定删除的tooltips 。

TTM_GETTOOLINFO         : 得到当前的TOOLINFO 信息。

TTM_SETTOOLINFO         : 在 发送 这个命令之前一定先 发送TTM_GETTOOLINFO 消息得到 TOOLINFO 之后再进行 发送 set

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

lpszText 必须已经申请好空间。

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

TOOLTIPS 的相关用法相关推荐

  1. Java中Date各种相关用法

    Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD:   Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...

  2. 【c++】14.编译proto和proto相关用法

    编译proto和proto相关用法 关于proto相关的知识可以参考系列博客 https://blog.csdn.net/daaikuaichuan/category_9869251.html [xx ...

  3. $.extend 的相关用法

    $.extend 的相关用法 1.1 $.extend(result,item1,item2-..) 将所有的参数项都合并result中,返回result,会破坏result的结构. 1.2 $.ex ...

  4. boost::mpl::always相关用法的测试程序

    boost::mpl::always相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::always相关用法的测试程序 C++实现代码 #include <boost ...

  5. boost::mpl::advance相关用法的测试程序

    boost::mpl::advance相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::advance相关用法的测试程序 C++实现代码 #include <boo ...

  6. boost::mpl::aux::template_arity相关用法的测试程序

    boost::mpl::aux::template_arity相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::aux::template_arity相关用法的测试程序 ...

  7. boost::mpl::aux::msvc_is_class相关用法的测试程序

    boost::mpl::aux::msvc_is_class相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::aux::msvc_is_class相关用法的测试程序 C+ ...

  8. boost::mpl::aux::largest_int相关用法的测试程序

    boost::mpl::aux::largest_int相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::aux::largest_int相关用法的测试程序 C++实现代 ...

  9. boost::mpl::inherit_linearly相关用法的测试程序

    boost::mpl::inherit_linearly相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::inherit_linearly相关用法的测试程序 C++实现代 ...

  10. boost::mpi::wait_any相关用法的测试程序

    boost::mpi::wait_any相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpi::wait_any相关用法的测试程序 C++实现代码 #include <s ...

最新文章

  1. mysql数据库映射到内存_基于共享内存的数据库映射
  2. express 的 middleware 设计
  3. MySQL 的 binlog 编号竟然可以这么大!
  4. Kattis之旅——Prime Reduction
  5. ios 调试的相关内容收集
  6. 最新Visual Studio 2010 下载及学习资料
  7. WINCE6.0+S3C6410主要时钟控制
  8. 关键字—修饰方法、类、属性和变量的关键字(共9个)
  9. sqlquerystress
  10. exit()和_exit()的区别
  11. EASE-Grid投影
  12. 移动端---媒体查询
  13. 九种NPP\GPP数据集介绍和下载
  14. 面试必备 | 带你彻底搞懂 Python 生成器。
  15. R语言 Kmeans聚类、PAM聚类、层次聚类、EM聚类
  16. Linux的进程管理,ssh创建远程连接与免密操作,文件传输,虚拟机联网
  17. C语言编程的双大于号,VC 双小于 双大于号
  18. UE4如何实现裸眼3D效果 3D立体效果
  19. Check It Again: Progressive Visual Question Answeringvia Visual Entailment(SAR)
  20. 少儿编程让孩子玩出智慧

热门文章

  1. 深夜看了张一鸣的微博,让我越想越后怕
  2. 计算机视觉——SIFT图像匹配算法
  3. OpenGauss数据库的安装与运行
  4. python_opencv_haze加雾处理
  5. 2021-11-10全球货币市场基础知识系列3
  6. QCC3040---Log module
  7. vim 保存出错 E45: readonly option is set (add ! to override)
  8. 淡泊明志, 宁静致远--如何在自学之路上爬得更高更远?
  9. Git Tortoise安装 CodeHub
  10. java 文件名过滤特殊字符