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 里面简单太多了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC ListCtrl是MFC中的一种控件,用于显示数据列表。如果需要在ListCtrl中嵌入进度条,可以通过以下步骤实现: 1. 首先,在ListCtrl的列头中添加一个进度条列。可以使用InsertColumn函数指定插入的列的标题和宽度。 2. 然后,通过SetItem函数为每一行数据的进度条列中插入一条数据。可以使用下述代码示例: ```cpp int nItem = pListCtrl->GetItemCount(); pListCtrl->InsertItem(nItem, _T("")); CProgressCtrl* pProgress = new CProgressCtrl; pProgress->Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 100, 20), pListCtrl, 0); pListCtrl->SetItemData(nItem, (DWORD_PTR)pProgress); pListCtrl->SetItem(nItem, nColumnIndex, LVIF_PARAM, NULL, 0, 0, (LPARAM)pProgress); ``` 3. 接下来,需要在绘制ListCtrl的每一行时,将进度条绘制出来。可以使用下述代码示例: ```cpp void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rcItem(lpDrawItemStruct->rcItem); int nColumnCount = GetHeaderCtrl()->GetItemCount(); // 绘制进度条 if (lpDrawItemStruct->itemData) { CRect rcProgress(rcItem.left, rcItem.top, rcItem.right, rcItem.bottom); CProgressCtrl* pProgress = (CProgressCtrl*)lpDrawItemStruct->itemData; pProgress->MoveWindow(rcProgress); pProgress->SetWindowPos(NULL, rcProgress.left, rcProgress.top, rcProgress.Width(), rcProgress.Height(), SWP_NOZORDER); } // 绘制其他单元格内容 // 绘制选择框 // 绘制焦点框 } ``` 4. 最后,在ListCtrl中更新进度条的值。可以使用下述代码示例: ```cpp CProgressCtrl* pProgress = (CProgressCtrl*)pListCtrl->GetItemData(nItem); pProgress->SetRange(0, 100); pProgress->SetPos(nProgressValue); ``` 通过以上步骤,就可以在VC ListCtrl中嵌入进度条,并更新和显示相应的进度值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值