zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    iframe透明
    c#创建可以为空类型
    div仿框架布局
    IBatis.Net学习笔记(六):Castle.DynamicProxy的使用
    很好玩的谷歌纵横
    TFS签入签出规范
    ibatis学习笔记
    iBATIS.net调用存储过程
    最新28个很棒的 jQuery 教程
    IBatis.Net 中的数据类型转换
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14851278.html
Copyright © 2011-2022 走看看