vc状态栏添加进度条

vc6.0中基本的实现思路是:
1.首先在系统的默认的状态栏中加入一个空白长行条,插入的位置可以自己选择。标题
为一个长的空格字符串,以便给将来的进度条控件留下足够的空间。
2.创建一个新进度条控件,放在该状态栏的空白长条上。
3.需要的时候,改变进度条的指示变化。
4.动态地调整位置和大小,适应窗口的变化。

具体编写代码过程如下:
1.在view菜单的Resource Symbols 中加入一个新的ID:  ID_INDICATOR_PROGRESS,
  也可以让vc默认指定。
2.在mainfrm.cpp的 数组static UINT indicators[] = {} 加入该ID_INDICATOR_PROGRESS,
  可以插入到你任意想要出现的位置。
3.进入字符串资源编辑,加入一个新的字符串资源,该字符串ID_INDICATOR_PROGRESS的caption
  添加足够长的空格,为了给将来放进度条预留足够长的空间。
  
  到现在运行的话,已经在状态栏中加入了一个空白的长条,下一步是需要我们在其中
  放入一个真实的进度条:
4.在mainfrm.h中声明一个公共变量,类型为 CProgressCtrl m_INDICATOR_PROGRESS;
在mainfrm.h中声明一个保护变量,类型为 BOOL m_INDICATOR_PROGRESS_bCreated;
在mainfrm.cpp的 OnCreate()中将 m_INDICATOR_PROGRESS_bCreated == FALSE;
5.在我们需要使用进度条时,先检查下,如果没有需要先创建一个再使用:
void CMainFrame::lls_INDICATOR_PROGRESS_show()
{
RECT myRect;
m_wndStatusBar.GetItemRect(0,&myRect);
if(m_INDICATOR_PROGRESS_bCreated  ==  FALSE)
{
m_INDICATOR_PROGRESS.Create(WS_VISIBLE|WS_CHILD|PBS_SMOOTH,myRect,&m_wndStatusBar,1);
// m_INDICATOR_PROGRESS.SendMessage(PBM_SETBARCOLOR, 0, RGB(0,0, 255));//前景色
m_INDICATOR_PROGRESS.SetRange(0,100);
m_INDICATOR_PROGRESS.SetStep(1);

m_INDICATOR_PROGRESS_bCreated = TRUE;
}
for(int i=0;i <100;i++)
{
Sleep(2);
m_INDICATOR_PROGRESS.StepIt();
// if()
}
}
6.当窗口发生变化时,进度条也要相应的调整:
void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
#if MSstatusBarUsed
RECT rc;
m_wndStatusBar.GetItemRect(0,&rc);
m_INDICATOR_PROGRESS.SetWindowPos(&wndTop,rc.left,rc.top,rc.right - rc.left,rc.bottom-rc.top,0);
#endif
}

vs2008版本及以上版本添加方法:
VS2010-MFC在状态栏上添加进度条比在VC6.0中更加简单,不需要再从CStatusBar类中派生子类。
仔细查看VS2010生成的MainFrm.h文件我们可以看出,m_wndStatusBar已经是CMFCStatusBar的对象了,而不是CStatusBar对象。
所以就去微软的官网查看CMFCStatusBar的帮助文档,有中文,太好了 微软提供的MFC的帮助文档,有中文 CMFCStatusBar类的帮助文档 此类自带进度条,
只需要调用就可以了
以下为如何在VS2010单文档程序中在进度栏上添加进度条
步骤1:如上图所示,将m_wndStatusBar从protected型变量改成public型变量;
步骤2:在MainFrm.cpp中添加进度条的标识IDS_PROGRESS
并在资源文件字符串表String Table中新增一个字符串IDS_PROGRESS,如下图
步骤3:在CMainFrame的OnCreate()函数中添加以下代码,用于初试化状态栏
步骤4:在View中某个读取文件的响应函数,添加以下代码,即可在状态栏显示文件加载进度条,以及当前文件大小和百分比信息
当我们点击读取文件后,文件总长度可以通过FILE类的Ftell函数进行获取,然后就可以在状态栏查看当前文档的加载进度以及已经加载文件的大小
整个编写流程就完成了,比VC 里面简单太多了。


猜你喜欢

转载自blog.csdn.net/qq_23992597/article/details/78492637