软件的可用性改善:善用帮助信息
创始人
2025-06-30 07:20:54
0

当我们吭哧吭哧的开发功能性模块的时候,也需要回头思考一下软件的可用性。今天的主题就是使用帮助信息来改善软件的可用性,让软件不仅”能用”,也更”好用”。

帮助信息,也叫工具提示(Tooltip)。当用户的鼠标悬停在一段文字或者控件上时,会自动显示相关的帮助信息。例如,如果一个控件上的字符串没有足够的控件显示,当鼠标悬停在控件上时,可以通过工具提示来显示完整的字符串。

实现工具提示的一个关键点是对 TTN_SHOW 通知消息的处理,此消息可以用来在工具提示显示之前设置它的显示位置。
另外一个要处理的消息是 TTM_ADJUSTRECT,它可以用来设置工具提示的精确显示位置。

下面是一段例子代码,其中添加了对工具提示的支持。

代码解析

我们声明了一些变量之后,我们来深入看看创建窗口的过程。首先,我们调用 CreateWindowEx 创建工具提示窗口,将主窗口设置为工具提示窗口的所有者(这一点对于获得正确的 Z 顺序行为非常重要)。

然后,我们获取字体并将其设置到工具提示控件中,以便工具提示以与我们相同的字体呈现。

然后,我们测量目标字体中的文本,并将 g_rcText 矩形设置为该文本的尺寸。我们使用该矩形在工具提示控件中建立工具的边界。

通过设置 TTF_SUBCLASS 标志,我们指示工具提示控件应子类化我们的窗口以拦截鼠标消息。这是一种灵活的方法,可以避免我们不得不使用 TTM_RELAYEVENT 消息手动转发鼠标消息。

绘制工具提示就比较简单了,我们只需要选择字体和绘制文本就可以了。

运行这个例子,我们将鼠标悬停在文本上。我们可以看到工具提示会显示出来,但它显示到了错误的位置。
不过,除此之外,事情正在按预期进行。工具提示具有正确的字体,仅当鼠标悬停在文本本身上时触发,当鼠标离开文本时关闭。让我们来解决工具提示显示位置的问题,代码如下图所示:

TTN_SHOW 通知消息在即将显示工具提示时发送。我们通过将文本矩形映射到屏幕坐标并使用 TTM_ADJUSTRECT 消息扩展矩形以包含工具提示控件将在文本周围放置的所有边距和边框来响应通知。
这样,当我们将工具提示放置在该位置时,边距和边框会精确匹配,并且文本将显示在所需位置。
返回 TRUE 以向工具提示控件指示我们已负责定位窗口,并且它不应执行其默认定位,这一点很重要。

我们再次运行例子程序,你会发现还有另一个问题:工具提示动画仍在进行,如果动画是幻灯片动画,则尤其会分散注意力。这很容易解决:调整我们创建工具提示控件的方式。

TTS_NOANIMATE 样式可以用来禁止动画,这意味着工具提示只是弹出来并不再显示动画,这正是我们想要的。

大功告成!

以上就是实现工具提示的基础知识。
当然,可能你想处理更多细节,例如仅在字符串被剪切时才显示工具提示。但是这些问题与工具提示无关,因此我不会在这里讨论它们,可能在以后的时间我们会来探讨这个问题。

总结

如果时常以用户的角度来使用软件,你会发现:工具提示真的是一个十分十分好用的特性。
那么,现在立即就在你的软件里加上这个功能吧!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...