最近作一个东西要自己做一个滚动条,决定用GDI自己绘制一个滚动条,然后加上鼠标键盘响应,做完了总结下滚动条的数据结构/模型,方便以后再用,或者方便有相同需求的同学。
本文讲述如何实现一个滚动条所用到的必要的数据结构和模型,方便自己去绘制一个滚动条,不是滚动条的入门或者使用教程。
关键字: 自绘滚动条,滚动条模型,滚动条数据结构,scrollbar data structure
<图> <优快云不能传图现在,等能传在传上来>
绘制一个滚动条,我们必须绘制如下几个部分(如图):
1.一个向上按钮,一个向下按钮,用于鼠标单击让其滚动;
2.track:thumb所在的轨道,用以拖动滚动的轨道;
3.thumb:可以拖动滚动的部分(或者scroll box)
期中track和向上按钮,向下按钮位置大小都很容易确定(也比较固定),这里不讨论如何绘制这个部分。主要讨论如何绘制计算和绘制thumb,我们要确定thumb的大小和位置。
先定义一个结构体供我们设置绘制使用的数据(参考上图):
ScrollInfo {
int min;
int max;
int page; // 一页包含的unit数。
int pos; // 当前thumb位置。
};
Scroll Information(简称si)都是以数据模型为单位的,一般用整数表示。(比如,如果数据模型为文本,这个单位就可以是文本的行),这个单位我们统一抽象称为unit。 图中右边的信息单位都是unit(左边的数据信息都是