我在创造一个
ToolTip
窗口并使用标志向其添加工具
TTF_IDISHWND | TTF_子类。(c++,win32)
我有一个清单文件,使我的程序使用新的WindowsXP主题
(通讯录32第6版)。
当我将鼠标悬停在已注册的工具上时,将显示提示。
很好。
当我点击鼠标时,提示消失了。
好 啊。
但是,离开工具并返回
不会再次出现提示。我需要在另一个工具上盘旋
然后回到我的工具那里拿小费回来。
当我删除清单文件(使用旧的非XP comctrl32)时
问题解决了。
在做了一些实验之后,我发现了以下不同之处
在Comctl32版本5(旧)和Comctl32版本6(新)中的工具提示之间:
-
新TTFA透明工具提示(当就地使用)实际上返回
如果鼠标按钮按下,则从WM ncitttest获取HTCLIENT
在消失之前,你会有片刻的专注。这会导致
应用程序的边框为flash。
-
旧的TTFA透明工具提示总是从WMnnCtTestEnter返回HTTACK,
因此,永远不要让西蒙顿自己,也永远不要窃取焦点。(这似乎只是审美,但可能会影响到下一点……)
-
新的工具提示似乎无法在鼠标单击后获得WM_TIMER事件,并且
只有在被取消激活和
重新激活。因此,它们不会在鼠标后重新显示提示窗口
单击并释放。
-
旧的工具提示会在鼠标再次移动时收到WM_TIMER消息
单击/释放后,他们准备重新显示提示。
因此,作为一个comctl32解决方案,我必须:
-
子窗口的子窗口,总是返回
如果工具要求透明,则写入。
-
避免使用TTF_子类,而是自己处理鼠标消息
我可以在收到WM xBUTTONUP后取消激活/重新激活。
我假设内部行为的变化是为了适应工具提示(如超链接)中新的“可点击”功能,但悬停行为似乎因此被破坏。
有人知道比我的子类解决方案更好的解决方案吗?我还漏掉了什么吗?