VC_控件之进度条.pdf

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC_控件之进度条

vc 进度条控件(一) 2011-05-27 17:49:12| 分类: MFC | 标签: |字号大中小 订阅 方法1: 单线程方式。 将你的任务分成多个部分,每运行一部分,就更新一下进度条。 这种方法就是很烦人。 方法2: 双线程方式。 主线程负责完成你想要的工作。副线程负责更新进度条。 更新进度条可以按照计时方法,或者根据主线程完成任务的状态来更新。 因此,你的主线程在完成任务时,还得用一个临界区随时报告任务的完成状态。 方法3: 双线程方式 主线程负责更新进度条,并且创建副线程完成任务的某部分工作。但这和单线程 很像。 在VC程序的状态栏中实现进度条 读者朋友们可能天天使用Visual C++这个强大的工具来开发应用程序, 不知道注意到没有,VisualC++每次装载一个项目的时候,为了使项目加载过程 不至于太单调,会在状态栏的左半部分会出现一个装载进度条,用来即时显示 VisualC++装载项目的进度,当项目装载完毕后,进度条隐藏。那么这个功能是 如何实现的呢?为了说明该功能的实现原理,本例提供了一个范例程序 prgsbar,它演示了在编辑视 图里显示文本文件,在加载文本文件时,在界面的 状态条中的进度指示器仿真显示文件的加载过程,当文本装载完毕后,进度条隐 藏。由于该程序在装载文件显示的 进度条时无法进行拷屏操作,所以这里没有 给出状态条中显示进度条的界面效果图,读者可以运行本书所带光盘中的程序代 码观看相应的效果。 一、实现方法 虽然VisualC++中的MFC类提供了标准的进度指示器控件 (progresscontrol), 但是我们不能在状态栏里直接使用这个控件,要解决这个问题,可以创建一个可 重用C++类CProgStatusBar,这个类从CStatusBar派生,用来来实现状态条 的进度指示。整个实现过程不是很难,思路是在状态栏创建一个进度指示器控制, 把它作为子窗口来对待,然后根据不同的状态来显示或者隐藏进度指示器。 在 具体实现CProgStatusBar类的过程中,首先在CProgStatusBar派生类中加 了一个CProgressCtrl类型的数据成员 --m_wndProgBar,然后重载CstatusBar 类的二个重要成员函数:OnCreate ()、OnSize (),最后还要在该类中添加一 个自定义成员函数OnProgress ()。在上述三个函数 , OnCreate ()负责在 状态栏第一次被创建时接收控制,继而创建进度指示器并将它初始化为一个子窗 口,它的实现代码如下: int CProgStatusBar::OnCreate(LPCREATESTRUCT lpcs) { lpcs-style |=WS_CLIPCHILDREN; VERIFY(CStatusBar::OnCreate(lpcs)==0); VERIFY(m_wndProgBar.Create(WS_CHILD, CRect(), this, 1)); m_wndProgBar.SetRange(0,100); return 0; } OnCreate()函数在状态栏的式样中加了一个WS_CLIPCHILDREN,它告诉Windows 不要绘制子窗口以下的状态栏区域,这样可以减 少屏幕闪烁。接着OnCreate () 函数创建进度指示器控件并将它的范围设置成[0,100]。注意在这里创建进度指 示器控件时没有用 WS_VISIBLE,因为我们要实现的目标是仅仅当装载文件时进 度条才显现,其余时间内应用程序都隐藏它。 熟悉Windows编程 的人都清楚,无论何时,只要在某个窗口里添加子窗口,那 么一定要负责管理它的大小尺寸,也就是说,当父窗口大小改变后,子窗口的大 小也要跟着作相应的改 变。一般来说,这个工作由父窗口的WM_SIZE消息处理 函数OnSize ()来作,所以我们也要处理该类的OnSize ()函数。 void CProgStatusBar::OnSize(...) { CStatusBar::OnSize(...); CRect rc; GetItemRect(0, rc);//获取状态条的第一个窗口的尺寸; m_wndProgBar.MoveWindow(rc,FALSE);//移动进度条到状态条的第一个窗口; } 从上述代码可以看出,CProgStatusBar::OnSize ()将进度指示器放在了状态栏 的第一个窗格,这个窗格通常用来显示程序的就绪信息和命令提示信息。注意 这里不论进度指示器是处于可见状态还是隐藏状态,MoveW

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档