滚动条第12章节:仿Word软件的滚动条tooltip

仿Word滚动条工具提示

我们的读者Jeff Miller在我们的滚动条程序上添加了滚动工具提示(tool tip),使它能呈现出类似于Word软件中的效果,下面我们就来看看具体是怎么做到的。

滚动条第12章节:仿Word软件的滚动条tooltip

滚动条第12章节:仿Word软件的滚动条tooltip

代码解析

我们首先在OnCreate函数中对工具提示进行了初始化(CreateWindow),当工具提示窗口创建成功后,我们通过SendMessage向它发送了一个TTM_ADDTOOL消息,指明我们希望在回调函数中设置工具提示的文本内容。另外,这里还指定了工具提示的Flag为TTF_TRACK,表明我们希望工具提示处于跟随模式。

在OnNotify消息处理函数中,我们对TTN_GETDISPINFO通知进行了处理,将指定的文本设置到了工具提示上。

由于我们不想工具提示自动的跟随鼠标或者自动的显示/隐藏,我们在代码中使用了一个跟踪型(Tracking)工具提示控件来显示滚动工具提示。

另外,我们还定义了两个函数CancelScrollTip和UpdateScrollTip。CancelScrollTip主要是向工具提示窗口发送TTM_TRACKACTIVATE消息来关闭跟踪。UpdateScrollTip则在滚动滑块未移动的情况下,发送TTM_TRACKPOSITION和TTM_TRACKACTIVATE消息来动态设置工具提示的位置。

当我们收到滚动条跟踪消息(SB_THUMBTRACK)时,我们会更新工具提示,并在必要的时候显示它。当我们收到滚动条跟踪完成消息(SB_ENDSCROLL)时,我们就移除工具提示。

上述的代码模仿了XP风格的Word软件的行为,也即:工具提示不会在用户滚动视图时跟随滚动条滑块移动,而是固定在滚动开始的位置。让新的滚动条重新开始拖动时,工具提示的位置才会进行更新。

这样设计的好处是,用户在拖动滚动条的时候,可以非常稳定的看到当前显示的页面,而眼光不需要随着滚动条而不停移动。

如果你还是希望工具提示和滚动滑块一起移动,可以将if (!g_fInScroll)这个判断语句从UpdateScrollTip函数中去掉即可。

总结

具体是什么效果,大家可以打开一个Word文档,拖动一下滚动条看看。效果还真是不错,是不是再一次有了想开发类似于Word这样的软件的冲动呢?

滚动条第12章节:仿Word软件的滚动条tooltip

来源:漫漫开发路

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月10日
下一篇 2020年5月10日

相关推荐