Visual C++ 界面编程之动画进度条的制作

 最近打算好好学习一下界面编程的相关技术。把基础的只是补一补。

progress control主要用来在进行数据读写,文件拷贝等操作总显示当前的工作进度,因此其主要操作就是设置进度条的位置和范围,并不断更新当前位置。

VC自带的进度条控件,除了在进度条上显示一个蓝色的光带外,没有其他的说明。下面我写了一个自己的控件类,如果对OnPaint函数进行一些修改的话就可以实现各种动画的功能了。

 

 

//MyTextProgressCtr.h

#ifndef define MYTEXTPROGRESSCTRL

#define MYTEXTPROGRESSCTRL
#pragma once
#include "afxcmn.h"

class CMyTextProgressCtrl :
 public CProgressCtrl
{
public:
 CString strBarTitle;
public:
 CMyTextProgressCtrl(void);
 virtual ~CMyTextProgressCtrl(void);
 void SetBarCaption(CString title);
protected:
 afx_msg void OnPaint();
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

 DECLARE_MESSAGE_MAP()

};

#endif

 

 

 

//MyTextProgressCtrl.cpp
#include "StdAfx.h"
#include "./mytextprogressctrl.h"

CMyTextProgressCtrl::CMyTextProgressCtrl(void)
{
 strBarTitle.Empty();
}

CMyTextProgressCtrl::~CMyTextProgressCtrl(void)
{
}

BEGIN_MESSAGE_MAP(CMyTextProgressCtrl,CProgressCtrl)

 ON_WM_PAINT()
 ON_WM_CREATE()
END_MESSAGE_MAP()

void CMyTextProgressCtrl::OnPaint()
{
 CPaintDC dc(this);
 int pos = GetPos();
 int low,hight;
 low=hight=0;
 GetRange(low,hight);
 int range=hight-low;
 
 float percent = float(pos)/float(range);
 CRect rect;
 GetClientRect(&rect);
 rect.right = rect.left + percent * rect.Width();
 
 dc.FillSolidRect(&rect,RGB(0,0,255));

 if (!strBarTitle.IsEmpty())
 {
  CRect rt;
  GetClientRect(&rt);
  dc.SetBkMode(TRANSPARENT);
  dc.SetTextColor(RGB(255,255,255));

  CSize ext;
  ext = dc.GetTextExtent(strBarTitle);
  int text=(rt.Width()-ext.cx)/2;
  if (percent*rt.Width()<text)
  {
   dc.SetTextColor(RGB(0,0,255));
  }
  dc.DrawText(strBarTitle,rt,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
 }
}


int CMyTextProgressCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CProgressCtrl::OnCreate(lpCreateStruct) == -1)

 {
  return -1;
 }
 return 0;
}


void CMyTextProgressCtrl::SetBarCaption(CString title)
{
 strBarTitle = title;
 Invalidate();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值