VS2015 MFC 进度栏编程

Posted zhou8744

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2015 MFC 进度栏编程相关的知识,希望对你有一定的参考价值。

一 CMainFrame中定义成员变量:protected: CProgressCtrl m_progressBar;

二 CMainFrame::OnCreate()函数返回之前,创建对象  

    m_progressBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 100, 200, 120), this, 8899); //创建水平进度栏
    m_progressBar.SetPos(50);                                                          //设置进度栏位置
    m_progressBarVer.Create(WS_CHILD | WS_VISIBLE | PBS_VERTICAL,CRect(10,150,30,200),this,8900); //创建垂直进度栏
    m_progressBarVer.SetPos(50);

三 把进度栏放在状态栏中:

    CRect rect;
    m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS), &rect);
    m_progressBar.Create(WS_CHILD | WS_VISIBLE|PBS_SMOOTH, rect, &m_wndStatusBar, 8899); //创建水平进度栏
    m_progressBar.SetPos(50);

四  当触发水平重绘或垂直重绘时,进度条不在所需位置时

 

void CMainFrame::OnPaint()
{
    CPaintDC dc(this); // device context for painting
                       // TODO: 在此处添加消息处理程序代码
                       // 不为绘图消息调用 CFrameWnd::OnPaint()

    CRect rect;
    m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS), &rect);  //每次重绘发生时,都去获取一个矩形区域
    if (!m_progressBar.m_hWnd)
    {
        m_progressBar.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH, rect, &m_wndStatusBar, 8899); //创建水平进度栏
    }
    else 
    {
        m_progressBar.MoveWindow(rect);// 也可用SetWindowPos函数,但是相对麻烦些
    }
    
    m_progressBar.SetPos(70);
}

========================================================

  让进度栏动起来

        CProgressCtrl的成员函数:SetRange() //设置进度栏范围 缺省0-100

  CProgressCtrl的成员函数:SetStep()// 设置步长

  CProgressCtrl的成员函数: StepIt() //使进度条按照SetStep()设定的步长动起来

==========================================================

  让鼠标的坐标点显示在状态栏中。

       状态栏是属于CMainFrame的,而鼠标活动在View层,因此需要在View类中增加一个消息,WM_MOUSEMOVE,在消息处理函数中

#include "MainFrm.h"
void CPropView::OnMouseMove(UINT nFlags, CPoint point)
{

    CString str;
    str.Format(L"x=%ld,y=%ld",point.x,point.y);
    /*注意变量的访问权限问题*/
    //((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowTextW(str); //方法1:将指定文本显示在状态栏最长的一个窗格中
    //((CMainFrame*)GetParent())->SetMessageText(str);                  //方法2:调用CMainFrame::SetMessageText() 将文本设定在状态栏索引值为0的窗格中
    //((CMainFrame*)GetParent())->GetMessageBar()->SetWindowTextW(str); //方法3:不需要修改变量的保护级别。
                                                                      //       可能需要将成员变量m_wndProgressBar从Protected 修改为Publi才能用
    GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowTextW(str); //方法4 用CMainWnd的成员函数
    CView::OnMouseMove(nFlags, point);
}

 

以上是关于VS2015 MFC 进度栏编程的主要内容,如果未能解决你的问题,请参考以下文章

mfc 11 应用程序旧式按钮和进度条

VS2010/MFC编程入门之二十(常用控件:静态文本框)

操作栏上不确定的进度条上的空指针异常

在VS2015中用C++创建MFC规则动态库DLL

VS2017 MFC 类向导 - 如何像在 VS2015 中一样使用它

VS2015 代码片段整理