加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:04:35 所属栏目:Windows 来源:网络整理
导读:我正在创建一个 ToolTip窗口并使用标志向其添加工具 TTF_IDISHWND | TTF_SUBCLASS. (c,win32) 我有一个清单文件,以便我的程序使用新的WindowsXP主题 (comctrl32版本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版本(我计划在某个时候发布问题).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读