2014-07-10 19:14:10|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:MFC, 界面设计, C/C++|来源:唯设编程网
本文介绍VC开发的时候使用MFC实现彩色进度条,通过合理的设置颜色,可以实现渐变色进度条。基本的实现原理就是重载一个基于CProgressCtrl的类,在该类中重载OnPaint函数实现进度条自绘。
首先是类的头文件声明:
#pragma once
// ExtProgressCtrl
class AFX_EXT_CLASS ExtProgressCtrl : public CProgressCtrl
{
DECLARE_DYNAMIC(ExtProgressCtrl)
public:
ExtProgressCtrl();
virtual ~ExtProgressCtrl();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnPaint();
};
新的进度条类名称是ExtProgressCtrl,父类是CProgressCtrl,其它保持默认,增加OnPaint重载函数的声明。下面是OnPaint函数实现的源代码:
void ExtProgressCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
CBrush BackgroundBrush;
BackgroundBrush.CreateSolidBrush(RGB(255,0,0));
CBrush ForeBrush;
ForeBrush.CreateSolidBrush(RGB(100,255,0));
CRect r;
this->GetClientRect(r);
double With=r.Width();
int min,max;
this->GetRange(min,max);
int pos= this->GetPos();
double unit=(double)r.Width()/(max-min);
dc.FillRect(r,&BackgroundBrush);
r.right=static_cast<LONG>(pos*unit);
dc.FillRect(r,&ForeBrush);
}
在OnPaint函数中使用CDC实现了进度条绘制,首先使用this构造一个CPaintDC类型变量,然后分别创建前景色和背景色的CBrush变量,通过GetClientRect获得当前控件的矩形区域,在使用CPaintDC类的FillRect绘制不同颜色的矩形。下面是实现的最终效果:

MFC功能是非常强大的,只是使用起来比较麻烦,特别是控件的重载没有其它界面库容易,但是如果你理解了它内部的原理,依然可以方便实现各种复杂的界面效果^_^