当前位置:C++技术网 > 资讯 > 进度条中的进度百分比的显示设置源代码详解

进度条中的进度百分比的显示设置源代码详解

更新时间:2016-01-03 16:24:50浏览次数:1+次

首先,我们另外创建一个基于进度条类CProgressCtrl的类来实现窗口进度百分比的更新,而作为主对话框类,则负责对话框的百分比数的递增,进度条百分比数据的更新是在WM_TIMERX消息中响应的。

CRect clientRC;
GetClientRect(clientRC);						//获取客户区域
CSize sztext = pDC->GetTextExtent(csPos);		//获取字符串的高度和宽度
int nX = (clientRC.Width() - sztext.cx) / 2;	//计算中心位置
int nY = (clientRC.Height() - sztext.cy) / 2;
首先获得客户区的大小,再得到百分比的字符串大小,利用两者得到算出中心点,并在中心点输出百分比,对于sztext 是变化的,因为我们输出的百分比的大小不一定一样。
double dFraction = (double)clientRC.Width() / (nMax-nMin);
int nLeft = nPos * dFraction;	 //计算左边距
第一句代码获得单位刻度,然后利用百分比进度与单位刻度相乘得到显示的区域的大小。也就是我们的百分比数所对应的区域大小,假设0%对应区域宽0,1%对应区域宽dFraction ,2%对应区域宽2*dFraction ......以此类推,对于进度条的显示,我们分为两部分,一部分就是已经百分比所对应的区域,另一部分就是未完成的进度所标示的区域。如何区分呢?就是利用左边距nLeft。我们定义两个矩形,leftRect,rightRect,对于leftRect我们对他的right字段进行限制,赋值为nLeft,rightRect则是对他的left字段进行赋值,也是nLeft,这样就相当于把一个矩形区域一分为二,分别对应百分比所对应的区域与未完成的进度所标示的区域。对于CRect类,以前它的构造函数封装字段是CRect(left,top,right,bottom),而现在重载了一个构造函数即(x,y,cx,cy),x,y是起始点,cx,cy是矩形的宽,高。

源代码请看《进度条中的进度百分比的显示设置