QQ登录

只需一步,快速开始

上位机MFC状态栏内嵌入进度条

[ 复制链接 ]
在状态栏中显示进度条已经很常用了。但MFC自带状态栏并没有这功能。
当前例程通过自己编写代码实现了这一功能。
只要将两文件PROGRESSBAR.CPP,PROGRESSBAR.H导入工程中就可以使用。
效果如下图

上位机MFC状态栏内嵌入进度条

上位机MFC状态栏内嵌入进度条

点击菜单上图中对应按钮,可以在状态样上显示进度条。
例程源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:PROGRESS_IN_STATUS_DEMO.rar 
文件大小:48.31 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我



实现过程:
建立自己的工程,单文档或多文档工程。
1. 从View菜单中,选择Resource Symbols。按New按钮,并指定为名字ID_INDICATOR_PROGRESS_PANE。
2. 在MainFrm.cpp中,找到indicators数组,并输入资源标识ID_INDICATOR_PROGRESS_PANE。将它放置到所有ID的后面。
3. 在资源编辑器中打开字符串,在Insert菜单中选择New String菜单。
4. 双击字符串,并选择ID,其消息为一组空格,其空格大小标志着进度条。
既然创建了窗格,现在就将进度条添加到里面:
1.在MainFrm.h中声明一个public变量CProgressCtrl,叫做 m_Progress。
2.在MainFrm.h中声明一个protected BOOL变量m_bCreated。
3.在MainFrm.cpp的OnCreate()函数中,初始化m_bCreated为FALSE:
m_bCreated = FALSE;

4. 现在,是使用它的时候了:
CMainFrame::OnSomeLongProcess()
{
        RECT MyRect;
        // substitute 4 with the zero-based index of your status bar pane.
        // For example, if you put your pane first in the indicators array,
        // you'd put 0, second you'd put 1, etc.
        m_wndStatusBar.GetItemRect(4, &MyRect);  

        if (m_bCreated == FALSE)
        {
                //Create the progress control
                m_Progress.Create(WS_VISIBLE|WS_CHILD, MyRect, &wndStatusBar, 1);

                m_Progress.SetRange(0,100); //Set the range to between 0 and 100
                m_Progress.SetStep(1); // Set the step amount
                m_bCreated = TRUE;
        }

        // Now we'd simulate a long process:
        for (int I = 0; I <100; I++) { Sleep(20); m_Progress.StepIt(); } }
在进度条创建时,如果窗口重新定位,需要重载OnSize函数使之正确重定位:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
        CMDIFrameWnd::OnSize(nType, cx, cy);
        RECT rc;
        m_wndStatusBar.GetItemRect(4, &rc);

        // Reposition the progress control correctly!
        m_Progress.SetWindowPos(&wndTop, rc.left, rc.top, rc.right - rc.left,
                rc.bottom - rc.top, 0);
}


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索