电脑
电脑软件
读者朋友们可能天天使用Visual C+ +这个强大的工具来开发应用程序,不知道注意到没有,Visual C++每次装载-个项目的时候,为了使项目加载过程不至于太单调,会在状态栏的左半部分会出现一一个装载进度条,用来即时显示Visual C++装载项目的进度,当项目装载完毕后,进度条隐藏。那么这个功能是如何实现的呢?为了说明该功能的实现原理
实现方法 虽然Visual C+ +中的MFC类提供了标准的进度指示器控件( progress control) , 但是我们不能在状态栏里直接使用这个控件,要解决这个问题,可以创建一个可重用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_ CL IPCHILDREN,它告诉Windows不要绘制子窗口以下的状态栏区域,这样可以减少屏幕闪烁。接着OnCreate ()函数创建进度指示器控件并将它的范围设置成[0, 100]。 注意在这里创建进度指示器控件时没有用WS_ _VISIBLE,因为我们要实现的目标是仅仅当装载文件时进度条才显现,其余时间内应用程序都隐藏它。 熟悉Windows编程的人都清楚,无论何时,只要在某个窗口里添子窗口,那么一定要负责管理它的大小尺寸,也就是说,当父窗口大小改变后,子窗口的大小也要跟着作相应的改变。-般来说, 这个工作由父窗C的WM_ SIZE消息处理函数OnSize ( )来作,所以我们也要处理该类的OnSize ()函数。
,本例提供了一个范例程序prgsbar, 它演示了在编辑视图里显示文本文件,在加载文本文件时,在界面的状态条中的进度指示器仿真显示文件的加载过程,当文本装载完毕后,进度条隐藏。由于该程序在装载文件显示的进度条时无法进行拷屏操作,所以这里没有给出状态条中显示进度条的界面效果图,读者可以运行本书所带光盘中的程序代码观看相应的效果。
有常识的去操作
注意细节