首页 > MFC > MFC中进度条的使用

MFC中进度条的使用

2013年2月17日 发表评论 阅读评论

嘛,其实这个不难,以前学孙鑫的MFC的时候也学过,但是好久没弄就忘了,最近做的那个要读大量的数据,但是读取速度比较慢,每次一读取,我就不知道它是乖乖在后台读取呢,还是完全死掉了。。所以,弄个进度条出来看看,让人有点期待也好。。就好像高中上不喜欢的课一样,每节课都是45分钟,但是如果给你手机或者手表不断地看看时间,你就多少觉得有点期待,啊,过去15分钟了,啊,20了,。。。。啊,还剩五分钟就解放了!!嗯,大概。。就是这样吧。。

好吧,正题,一般建立一个基于单文档的MFC工程,弄上进度条,一般都是显示在右下角的那个地方的,就是下图右下角那几个“空格”的位置嘛。jindutiao
使用方法很简单,首先我们要在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

分类: MFC 标签: