现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

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

2012-08-04 23:03 工业·编程 ⁄ 共 1658字 ⁄ 字号 暂无评论

    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();
}

给我留言

留言无头像?