当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《Win32ToolTip消失,永远不会重新出现在Commctl6中》经验,为你挑选了0个好方法。

我正在创建一个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窗口,如果工具要求透明,则始终从WM_NCHITTEST返回HTTRANSPARENT.

避免使用TTF_SUBCLASS而是自己处理鼠标消息,这样我就可以在收到WM_xBUTTONUP时取消激活/重新激活.

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

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有