- 1、本文档共34页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)