滚动条:第二章节

滚动条:第二章节

作者:BlogUpdater |  时间:2019-11-04 |  浏览:471 |  评论已关闭 条评论

充满细节的滚动条

对于Windows开发者来说,与滚动条相关的开发应该不是很困难,因为它的基础原理不是很困难,但是围绕滚动条的还有许许多多的小细节问题需要解决。如果你不能彻底把这些细节问题搞明白,那么你所编写的程序会看来有些怪异,甚至你自己也不能用语言表达出来:它就是在某些地方有点怪怪的 ,就像一些背景的噪音一样让你感觉到不痛快。将这些细节问题弄明白,有助于你的程序干净,爽朗。

基础程序
让我们从之前的最基础程序开始,我们会在这个程序上慢慢加上一些滚动条有关的特性。之前的基础程序不过100多行代码,我们先添加如下的变量到这个程序中:

我们添加了3个变量,一个是字体句柄,用来控制列表的字体。一个是每行的高度,最后一个是列表的数量。

然后我们添加如下的几个函数:

代码讲解

在程序的OnCreate函数(WM_CREATE消息处理例程)中,我们通过SystemParametersInfo获取到了系统字体,然后通过这个字体构建了一个新的字体。将这个新的字体选择进DC后,我们就可以计算出在这种字体下的高度。
在OnDestory函数(WM_DESTORY消息处理例程)中,我们也要记得销毁我们创建的字体,否则会导致GDI资源泄露。

代码讲解

我们重新定义了一个新的函数PaintSimpleContent,这个函数会被我们的通用绘制函数PaintContent调用,也就是说,我们的界面实际绘制工作都会在PaintSimpleContent中实现。
在这个函数中,我们将新建的字体选择进WM_PAINT消息的DC中,并调用TextOut来绘制一行一行的文本。最后,我们将原来的字体选择回DC,程序结束。

好了,程序已经修改讲解完毕了,可以进行编译跑一跑了。
很抱歉,我用来讲述相关背景知识的时间还是有些长了,但是我们将会在第四章节感受到事情会变得有意思起来,相信我!

总结

我也开发了一段时间的Windows程序了,老实说,我是没太关注滚动条的细节,我也承认,我有时候会感到我对某些重要概念没有透彻的理解,我也感觉我的程序运行起来怪怪的(特别是涉及滚动条的时候)。Raymond,真被你说中了还。

本文来自:Raymond Chen的The Old New Thing博客,时间:2003年7月25日。

评论已关闭。