Windows – Win32 ToolTip消失,永远不会重新出现在Commctl 6中

我正在创建一个 ToolTip窗口并使用标志向其添加工具
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时取消激活/重新激活.

我假设内部行为的变化是为了适应工具提示中的新“可点击”功能,如超链接,但悬停行为似乎因此被打破.

有谁知道比我的子类解决方案更好的解决方案?我错过了其他一些观点吗?

您不是唯一一个在这些DLLS之间遇到工具提示的可比性问题的人.

我对可用的通用控件中的新工具提示也没有任何问题.在添加清单和提交应用程序之前,我们已经使用鼠标消息进行了修改并激活/停用了提示 – 所以听起来你的行为并不是太疯狂.

我们仍然存在TTN_NEEDTEXT消息在鼠标移动时不断发送的问题(不仅仅是在悬停时),定位大提示问题(可能不是新的东西),而是发送奇怪的unicode消息而不是ANSI版本(我计划在某个时候发布问题).

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...