You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

始终为弹出窗口的tooltip控件如何实现自定义绘制?

自定义绘制Tooltip的实现方案
  • 首先明确核心前提:Tooltip自带的WS_POPUP、WS_EX_TOOLWINDOW样式,和控件绑定父窗口(所有者窗口)并不冲突。WS_POPUP仅代表Tooltip不属于WS_CHILD类型的子控件,顶层弹出窗口完全可以合法设置所有者窗口,该所有者窗口就是接收Tooltip通知消息的载体。
  • 步骤1:创建Tooltip时绑定所有者窗口
    调用CreateWindowEx创建Tooltip控件时,直接将目标父窗口句柄传入hWndParent参数即可,无需修改Tooltip自带的默认样式。系统会自动将Tooltip的所有通知消息路由到该所有者窗口的消息循环中,满足NM_CUSTOMDRAW机制的要求。
  • 步骤2:正确配置工具关联参数
    发送TTM_ADDTOOL消息关联目标工具时,将TOOLINFO结构体的hwnd字段设置为上述所有者窗口句柄,按业务需求配置uFlags和uId字段,确保通知消息路由路径正确。
  • 步骤3:在所有者窗口处理自定义绘制消息
    在所有者窗口的WM_NOTIFY消息处理逻辑中,判断消息携带的NMHDR结构体的code字段是否为NM_CUSTOMDRAW,确认是Tooltip的绘制通知后,将lParam强转为NMCUSTOMDRAW类型,根据dwDrawStage阶段执行对应绘制逻辑:
    • 若需全局自定义样式,可在CDDS_PREPAINT阶段返回CDRF_SKIPDEFAULT,自行绘制整个Tooltip的背景、文本、边框等内容
    • 若只需修改局部样式,可在CDDS_PREPAINT阶段返回CDRF_NOTIFYITEMDRAW,接收子项绘制通知后针对性修改文本颜色、背景色等属性

注意:不要主动移除Tooltip自带的WS_POPUP或WS_EX_TOOLWINDOW样式,否则会破坏Tooltip原生的自动定位、显隐逻辑,导致控件行为异常。

内容的提问来源于stack exchange,提问作者user15284017

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:39:00