在许多自绘控件中进度条的绘制是相对要非常容易得多的一件事情,因为进度条只作为进度信息的显示并不需要做其它的鼠标键盘事件处理,设置一下最小进度和最大进度基本上就可以用了。
我就说说我自绘进度条的方法,首先要绘制它就必须先获得进度相关的一些参数信息,列如最小进度最大进度和当前进度值,这些值获得的方法也很简单通常的办法就是向进度条控件发消息,例如PBM_GETPOS得到当前进度值,这个方法虽然简单但是效率并不高。还有个方法就是获得存储进度信息的数据结构体,当然这个结构体怎样获得微软并没有公开给用户,在这里我就透露下tagPRODATA这样一个构体,下面来看下这个结构体的申明:
那如何获得这个结构体呢?其实非常简单这个结构就存储在窗口属性表里可以用以下函数去获得它:
好了有了以上这个结构体以后我们就可以着手处理绘制工作了,处理进度条的绘制需要处理WM_PAINT,WM_ERASEBKGND这两个消息,先看看WM_PAINT消息的代码处理:
接下来就是WM_ERASEBKGND消息的代码处理:
上面的代码基本上完成了一个粗造的进度条自绘工作,要注意的是Windows还对进度条的非客户区进行了处理,是用于画进度条边框的,如果你不喜他为你绘制的边框那么你可以处理这个消息或者干脆处理WM_NCCALCSIZE消息将非客户尺寸调整为0把边框放在WM_PAINT或WM_ERASEBKGND消息中去画这样更简洁。