Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14498130
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:57:50

下载本文示例代码
  我最近作了一个C /MFC程序,这个程序有时要加载大容量文件,为了让文件加载过程不至于太单调,我想在UI中用进度指示器显示文件的加载过程,而且我想在程序的状态栏中使用这个指示器控制。经过一番研究和尝试,我实现了自己的想法。本文将详细介绍整个实现过程。希望大家在解决类似的问题时少走一些弯路......  尽管MFC提供了标准的进度指示器控件(progress control),但是不能在状态栏里直接使用这个控件,因此我创建了自己的可重用C 类来实现进度指示。这个类从CStatusBar派生。整个实现过程不是很难,思路是在状态栏创建一个进度指示器控制,把它作为子窗口来对待,然后根据不同的状态来显示或者隐藏进度指示器。本文提供了一个范例程序pgrsbar,这个程序的框架使用了MFC的文档/视图结构,在编辑视图里显示文本文件。打开文件的时候,pgrsbar仿真长时间的加载过程并在状态栏里显示进度指示,如图一所示。我将这个含有进度指示器的状态栏封装在了一个CStatusBar派生的类中——CProgStatusBar。 图一 在状态栏里显示进度指示  下面是这个类的详细说明和使用方法:   CProgStatusBar是从标准的MFC类CStatusBar派生而来。我在CProgStatusBar派生类中加了一个CProgressCtrl类型的数据成员——m_wndProgBar,并且实现了三个重要的成员函数或方法: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,因为我想在程序开始的时候隐藏它。zmbbs=1;共2页。 1 2 :   我最近作了一个C /MFC程序,这个程序有时要加载大容量文件,为了让文件加载过程不至于太单调,我想在UI中用进度指示器显示文件的加载过程,而且我想在程序的状态栏中使用这个指示器控制。经过一番研究和尝试,我实现了自己的想法。本文将详细介绍整个实现过程。希望大家在解决类似的问题时少走一些弯路......  尽管MFC提供了标准的进度指示器控件(progress control),但是不能在状态栏里直接使用这个控件,因此我创建了自己的可重用C 类来实现进度指示。这个类从CStatusBar派生。整个实现过程不是很难,思路是在状态栏创建一个进度指示器控制,把它作为子窗口来对待,然后根据不同的状态来显示或者隐藏进度指示器。本文提供了一个范例程序pgrsbar,这个程序的框架使用了MFC的文档/视图结构,在编辑视图里显示文本文件。打开文件的时候,pgrsbar仿真长时间的加载过程并在状态栏里显示进度指示,如图一所示。我将这个含有进度指示器的状态栏封装在了一个CStatusBar派生的类中——CProgStatusBar。 图一 在状态栏里显示进度指示  下面是这个类的详细说明和使用方法:   CProgStatusBar是从标准的MFC类CStatusBar派生而来。我在CProgStatusBar派生类中加了一个CProgressCtrl类型的数据成员——m_wndProgBar,并且实现了三个重要的成员函数或方法: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,因为我想在程序开始的时候隐藏它。zmbbs=1;共2页。 1 2 : 下载本文示例代码


VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器VC实现在状态栏中加入进度指示器
阅读(146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~