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