科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC通用控件编程之CProgress控件

VC通用控件编程之CProgress控件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

进度条控制主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况。

作者:佚名 来源:programunion 2007年10月22日

关键字: VC 编程 CProgress 控件

  • 评论
  • 分享微博
  • 分享邮件
(一)进度条的主要功能

  进度条控制(Progress Control)主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。

  进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范围用来表示整个操作过程的时间长度,当前位置表示完成情况的当前时刻。SetRange()函数用来设置范围,初始范围为0-100,SetPos()函数用来设置当前位置,初始值为0,SetStep()函数用来设置步长,初始步长为10,StepIt()函数用来按照当前步长更新位置,OffsetPos()函数用来直接将当前位置移动一段距离。如果范围或位置发生变化,那么进度条将自动重绘进度区域来及时反映当前工作的进展情况。

  进度条的对象结构

  进度条控制的建立方法

  CProgressCtrl &ProgressCtrl 建立进度条控制对象结构

  Create 建立进度条控制对象并绑定对象

  进度条控制类CprogressCtrl::Create的调用格式如下:

  BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

  其中参数dwStyle用来确定进度条控制的控制风格;参数rect用来确定进度条控制的大小和位置;参数pParentWnd用来确定进度条父窗口指针;参数nID用来确定进度条控制的控制符ID值。

  2、进度条控制的类属性

  进度条控制的类属性包括设置进度条最大最小控制范围SetRange、设置进度条当前位置 SetPos、设置进度条当前位置偏移值OffsetPos和设置进度条控制增量值SetStep。

  3、进度条控制的操作方法

  进度条控制的操作方法主要是使进度条控制并重绘进度条的StepIt函数。

  进度条控制的应用技巧示例

  1、利用应用程序向导AppWizard生成基于对象框的应用程序CProgDlg;

  2、在对话框中设置进度条和静态文本控制,其ID分别为IDC_PROG和IDCPERCENT;

  在对话框初始代码中增加控制的范围和位置:

  在ProgDlg.h中设置两个数据成员,用来表示进度条的最大值和步长:

//ProgDlg.h

class CProgDlg:public Cdialog

{ ......//其它代码

public:

int m_nMax,m_nStep;

...... //其它代码

}

  (2)在ProgDlg.cpp中设置初始状态

BOOL CProgDlg::OnInitDialog()

{ Cdialog::OnInitDialog();

......//其它代码

//TODO:Add extra initialization here

CProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);

pProgCtrl->SetRange(0,200);//设置进度条范围

......//其它代码

m_nMax=200;

m_nStep=10;

SetTimer(1,1000,NULL);//设置进度条更新时钟

return TRUE;

}

  (3)完善WM_TIMER消息处理,使进度条按照当前步长进行更新,同时完成进度条的百分比显示:

void CProgDlg::OnTimer(UINT nIDEvent)

{ //TODO:Add your message handler?

CProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);

int nPrePos=pProgCtrl->StepIt();//取得更新前位置

char test[10];

int nPercent=(int)(((nPrePos+m_nStep)/m_nMax*100+0.5);

wsprintf(test,?%d%%?,nPercent);

GetDlgItem(IDC_PERCENT)->SetWindowText(text);

Cdialog::OnTimer(nIDEvent);

}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章