我正在创建一个
ToolTip窗口并使用标志向其添加工具
TTF_IDISHWND | TTF_SUBCLASS. (c,win32)
TTF_IDISHWND | TTF_SUBCLASS. (c,win32)
我有一个清单文件,以便我的程序使用新的WindowsXP主题
(comctrl32版本6).
当我将鼠标悬停在已注册的工具上时,会出现提示.
好.
当我单击鼠标时,尖端消失.
好.
但是,远离工具并返回
再次不会使提示重新出现.我需要将鼠标悬停在不同的工具上
然后回到我的工具,让小费回来.
当我删除我的清单文件(使用较旧的非XP comctrl32)时,
问题消失了.
做了一些实验后,我发现了以下不同之处
Comctl32版本5(旧版)和Comctl32版本6(新版)中的工具提示之间:
>新的TTF_TRANSPARENT工具提示(在就地使用时)实际返回
来自WM_NCITTEST的HTCLIENT,如果鼠标按钮停止,从而得到
WM_LBUTTONDOWN并在消失前偷走焦点片刻.这导致
应用程序的边框闪存.
>旧的TTF_TRANSPARENT工具提示始终从WM_NCHITTEST返回HTTRANSPARENT,
因此永远不会自己获得WM_LBUTTONDOWN并且永远不会窃取焦点. (这似乎只是审美,但可能影响下一点…)
>点击鼠标后,新的工具提示似乎没有得到WM_TIMER事件
仅在取消激活后恢复获取(一堆)计时器事件
重新激活.因此,它们不会在鼠标之后重新显示其尖端窗口
单击并释放.
>只要再次移动鼠标,旧工具提示就会收到WM_TIMER消息
点击/释放后,他们准备重新显示他们的提示.
因此,作为一个comctl32解决方法,我不得不:
>子类化TOOLTIPS_CLASS窗口并始终从中返回HTTRANSPARENT
如果工具要求透明度,则WM_NCHITTEST.
>避免使用TTF_SUBCLASS而是自己处理鼠标消息
我可以在收到WM_xBUTTONUP时取消激活/重新激活.