MFC中进度条的使用
嘛,其实这个不难,以前学孙鑫的MFC的时候也学过,但是好久没弄就忘了,最近做的那个要读大量的数据,但是读取速度比较慢,每次一读取,我就不知道它是乖乖在后台读取呢,还是完全死掉了。。所以,弄个进度条出来看看,让人有点期待也好。。就好像高中上不喜欢的课一样,每节课都是45分钟,但是如果给你手机或者手表不断地看看时间,你就多少觉得有点期待,啊,过去15分钟了,啊,20了,。。。。啊,还剩五分钟就解放了!!嗯,大概。。就是这样吧。。
好吧,正题,一般建立一个基于单文档的MFC工程,弄上进度条,一般都是显示在右下角的那个地方的,就是下图右下角那几个“空格”的位置嘛。
使用方法很简单,首先我们要在CMainFrame类中添加一个进度条的变量和一个指示进度条进度百分比的变量:
public: CProgressCtrl m_progress; int Progress_p;//取值范围1~100
然后在CMainFrame::OnCreate这个函数中初始化Progress_p = 0;
接下来就给CMainFrame添加WM_PAINT事件,每次刷新屏幕时都重绘进度条,根据孙鑫MFC书中所言,我们实际上每次是把进度条绘在窗格所谓的矩形的位置上的,但是当我们缩放整个窗口的时候,这个窗格的位置,大小都会发生改变,所以如果不在每次重绘时都重新绘制进度条的话,那么缩放窗口后进度条的位置就会乱掉。而且,每次重绘的时候,都要判断是否已经有进度条与上面的m_progress变量相关联,所以,看代码吧。。
void CMainFrame::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CFrameWnd::OnPaint() CRect rect; m_wndStatusBar.GetItemRect(1,&rect); if(!m_progress.m_hWnd) m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,rect,&m_wndStatusBar,123); else m_progress.MoveWindow(rect); m_progress.SetPos(Progress_p); }
GetItemRect是对多个窗格进行索引。如果想要改变窗格大小,可以在CMainFrame::OnCreate里面添加:
m_wndStatusBar.SetPaneInfo(1,123,SBPS_NOBORDERS,100);
把索引为1的窗格宽度设置为100或者其他。
然后如果你要在CView中调用刷新进度条进度,那么就用一个简单的方法:
CMainFrame* pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd; pMain->Progress_p = 50; pMain->OnPaint();
好吧,大概就以上这么些东西,给自己留做笔记。。
【完】
本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com