工控编程吧
标题:
95上位机VC MFC进度条渐变颜色显示
[打印本页]
作者:
qq263946146
时间:
2015-12-18 19:01
标题:
95上位机VC MFC进度条渐变颜色显示
(, 下载次数: 0)
上传
点击文件名下载附件
95上位机VC MFC进度条渐变颜色显示
功能展示
MFC默认的进度条颜色是单一的,如果想实现进度条的颜色渐变显示,我们得自己动手编辑实现,我们当前例程简单实现了渐变的进度条功能,效果如图;
要点提示
只需要在从CProgressCtrl派生自己的类,在OnPaint() 函数中实现便可。进度条渐变色从左到右渐变,只要把进度条的矩形框从左到当前的位置,依次填充颜色值渐增的颜色便可;我们当前例程是使用了循环实现for(int m=255;m>0;m--)
实现功能
1.新建基于对话框的应用程序
2.从CProgressCtrl派生一个新类,class CProgressEx : public CProgressCtrl,添加三个变量用于设置不同的颜色值private: COLORREF m_crText; //文本颜色 COLORREFm_crProgress; //进度颜色 COLORREF m_crBlank; //空白区域颜色;并在构造函数中初始化 m_crText = RGB(255,0, 0); m_crBlank = RGB(182, 182, 182); m_crProgress = RGB(0,255, 0);
3.添加OnPaint()函数实现当前进度文字显示功能;
//渐变文字显示
PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps); //开始绘制
int nPos = GetPos(); //获取当前进度条的位置
CRect clientRC;
GetClientRect(clientRC); //获取客户区域
pDC->SetBkMode(TRANSPARENT); //将设备上下文的背景模式设置为透明
int nMin, nMax;
GetRange(nMin, nMax); //获取进度条的显示范围
//获取单位刻度
double dFraction = (double)clientRC.Width() / (nMax-nMin);
int nLeft = nPos * dFraction; //计算左边距
CRect leftRC = clientRC;
leftRC.right = nLeft;
CRect rightRC = clientRC;
rightRC.left = nLeft;
复制代码
for(int m=255;m>0;m--)
{
int x;
x = leftRC.Width() * m / 255;
pDC->FillRect(CRect(0,0,x,leftRC.Height()),&CBrush(RGB(0,m,255)));//蓝到青渐变
}
pDC->FillRect(rightRC, &CBrush(m_crBlank));
ReleaseDC(pDC); //释放设备上下文
EndPaint(&ps);
复制代码
4.自定义类的使用,添加进度条控件,关联变量CProgressEx m_Progress;添加按钮,关联函数用于触发定时器SetTimer(1, 100, NULL);再实现定时器处理功能
if(1==nIDEvent)
{
int nMin, nMax;
m_Progress.GetRange(nMin,nMax);
if(m_Progress.GetPos()>=nMax)//进度完成时处理
{
CDialog::OnOK();
}
m_Progress.SetPos(m_Progress.GetPos()+1);
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/039c887e840f6663ea34f81dab986da4/0/0/w_19rt75t2l9.swf-albumId=5052073009-tvId=5052073009-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 2)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4