MFC实现渐变色进度条

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实现渐变色进度条

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

发表评论0条 】
网友评论(共?条评论)..
MFC实现渐变色进度条