前段时间,有人问了我这样一个问题,今天来说道说道。

他是这样问的:

“当我将鼠标悬停在一个已经被禁用的窗口上时,窗口上对应的工具提示并没有出现?
这个是预期的行为吗?为什么在文档中没有说明?”

实际上,我想你应该已经知道答案了,文档中确实已经有描述过这个行为了,但是你需要将这些片段联合在一起来理解。

当一个窗口被禁用时,它将不会收到任何键盘和鼠标输入的消息。如果你研究一下 EnableWindow 的帮助文档,你就会知道确实是这样规定的。

接下来,工具提示控件怎么知道何时应该显示,何时应该隐藏呢?

一种方法是修改窗口过程,以便它获取所有输入消息,并通过 TTM_RELAYEVENT 消息将它们转发到工具提示空件。
这样,工具提示控件就知道鼠标的位置,并可以相应地显示和隐藏自身。

或者,可以使用 TTF_SUBCLASS 标志告诉工具提示控件对工具窗口进行子类化并获取输入本身。

以上两条都已经在 MSDN 里的某个角落里有相关的描述了。现在,让我们将这些知识点连接在一起来理解。

工具提示控件可通过 TTF_SUBCLASS 自动查看发往工具窗口的所有输入,也可以通过 TTM_RELAYEVENT 手动查看。
如果窗口被禁用,则它不会收到任何输入。

因此,工具提示控件没有要查看的输入消息,因此不知道何时出现或消失。这也是为什么您将不会看到隐藏窗口的工具提示,以及为什么在将鼠标捕获到另一个窗口时也不会看到工具提示。

所以你看,你早就知道答案了。你只是没有意识到。

总结

从体验上来说,我还是倾向于在一个已经禁用的窗口上显示工具提示,因为有些用户会看到一个变灰的按钮,但是他可能不明白为什么会这样?
如果这个时候,有个工具提示出来,就显得更加友好了。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why can’t I display a tooltip for a disabled window?》

打开网易新闻 查看更多图片