• MFC状态栏的创建与添加进度条


    1.首先要创建状态栏

      MFC中创建状态栏是用数组来分隔格子的.所以要先弄个数组

    下面在自己继承的CWnd类.cpp文件中定义一个静态数组indicators

    static UINT indicators[]=
    {
        IDS_STRING104,
        IDS_PROGRESS,
        IDS_STRING105,
        IDS_STRING106
    };

    这里面的值,可以自己定义,也可以在字符资源中定义

    MFC教程是让在字符串资源文件中定义

    下面来创建状态栏了,在MyWnd的WM_CREATE消息中创建,

    即OnCreate()函数中

    m_statusBar是在类的.h文件中定义的成员变量

    CStatusBar m_statusBar;

    //创建状态栏
        m_statusBar.CreateEx(this);
        m_statusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));//用静态数组来分隔状态栏
        m_statusBar.SetPaneInfo(0, IDS_STRING104, SBPS_STRETCH, 0);//设置第一格子填充剩余的空间
        m_statusBar.SetPaneInfo(1,IDS_PROGRESS, SBPS_NORMAL, 100);//设置第二格子的宽度,为添加进度条的宽度

    这样就创建好了状态栏了.

    2.添加进度条到状态栏中

     要想把进度条放到状态栏中,首先要获取状态栏中要放置的格子区域大小,

    我要放在第二个格子中,所以就要获取状态栏第二个格子的区域大小.

    用状态栏的成员函数GetItemRect()可以获取指定格子的区域

    CRect rect;
    m_statusBar.GetItemRect(1, &rect);

    为了防止窗口大小改变这区域也要相应的改变,所以我把创建进度条放在了WM_SIZE消息中,即OnSize()函数中

    m_progressState为类的成员变量,定义在类的.h文件中

    CProgressCtrl m_progressState;

    void MyWnd::OnSize(UINT nType, int cx, int cy)
    {
        CFrameWnd::OnSize(nType, cx, cy);
    
        // TODO: 在此处添加消息处理程序代码
        CRect rect;
        m_statusBar.GetItemRect(1, &rect);//获取第二个格子的区域大小
        if (m_progressState.m_hWnd)  //判断进度条是否创建了,没创建就创建,创建了就移动到第二个格子的位置
        {
            m_progressState.MoveWindow(rect);//移动进度条
        }
        else
        {
            m_progressState.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH, rect, &m_statusBar, 123);//创建进度条,位置就是状态栏的第二格子,父窗口为状态栏
            m_progressState.SetRange(0, 100);//设置进度条的取值范围
            m_progressState.SetPos(50);  //设置进度条的当前位置
        }
    }

    书上说的是放在WM_PAINT消息中.也可以,看自己的心情呀,反正都一样.

    3.效果展示

    签名:GreenLeaf1976
  • 相关阅读:
    内存映射函数remap_pfn_range学习——代码分析(3)
    内存映射函数remap_pfn_range学习——示例分析(2)
    内存映射函数remap_pfn_range学习——示例分析(1)
    在busybox里使用ulimit命令
    unlocked_ioctl和compat_ioctl
    使用cat读取和echo写内核文件节点的一些问题
    如何成为强大的程序员?
    如何实现“秒杀”系统
    关于博客园代码样式的调整
    Consuming a RESTful Web Service
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14851278.html
Copyright © 2020-2023  润新知