注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一江春水向西流

程序人生

 
 
 

日志

 
 
关于我

夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才,非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!

网易考拉推荐

VC通用控件编程之CProgress控件  

2009-06-18 20:33:17|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

  (一)进度条的主要功能

  进度条控制(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);

}

  评论这张
 
阅读(558)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017