我正在创建ToolTip窗口并使用标志向其添加工具 TTF_IDISHWND | TTF_SUBCLASS。 (C++,win32)Win32 ToolTip消失再也不会出现在Commctl中6
我有一个清单文件,使我的程序使用新的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时取消激活/重新激活。
我假定在内部行为变化为以适应像的超链接工具提示新的“可点击”的特点,但悬停行为似乎是由此破碎。
有谁知道比我的子类解决方案更好的解决方案吗?我错过了其他一些观点吗?
我有`tooltip`控件的类似问题。我的问题似乎很简单,但没有人提供解决方案。我提供了一个赏金,但得到了1个答案,这对我没有帮助。我问你,如果你可以看看[我的问题](http://stackoverflow.com/questions/21238449/tooltip-is-never-shown-again-after-i-click-on-the-button-rephrased-to - 反映)并告诉我你是否遇到过并解决过这样的问题。我为这样的打扰而道歉,通常我不会以这种方式寻求帮助,但我绝望。谢谢。最好的祝福。 – AlwaysLearningNewStuff 2014-01-29 21:32:15