zoukankan      html  css  js  c++  java
  • 010.MFC_Progress

    一、建立名为processCtrl的MFC工程,添加Progress Control 和 button控件。修改button Caption属性为start,ID属性为IDC_BTN_START

    为进度条添加控件变量m_progress

    二、双击button进入processCtrlDlg.cpp,添加

    void CprocessCtrlDlg::OnBnClickedBtnStart()
    {
        // TODO: 在此添加控件通知处理程序代码
        //自动更新
        SetTimer(1,100,NULL);
        //关闭start按钮
        GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE);
        /*int nPos;
        nPos = m_progress.GetPos();
        nPos += 10;
        m_progress.SetPos(nPos);*/
    }

    2、选中对话框,添加消息,如图操作进入processCtrlDlg.cpp,添加

    void CprocessCtrlDlg::OnTimer(UINT_PTR nIDEvent)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    
        int nPos,nMin,nMax;
        m_progress.GetRange(nMin,nMax);
        nPos = m_progress.GetPos();
        nPos ++;
        if(nPos > nMax)
        {
            //停止定时器
            KillTimer(1);
            nPos = 0;
            //开启start按钮
            GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
        }
        m_progress.SetPos(nPos);
    
        CDialogEx::OnTimer(nIDEvent);
    }

    源码

    // processCtrlDlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "processCtrl.h"
    #include "processCtrlDlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // 对话框数据
        enum { IDD = IDD_ABOUTBOX };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CprocessCtrlDlg 对话框
    
    
    
    
    CprocessCtrlDlg::CprocessCtrlDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CprocessCtrlDlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CprocessCtrlDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_PROGRESS1, m_progress);
    }
    
    BEGIN_MESSAGE_MAP(CprocessCtrlDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BTN_START, &CprocessCtrlDlg::OnBnClickedBtnStart)
        ON_WM_TIMER()
    END_MESSAGE_MAP()
    
    
    // CprocessCtrlDlg 消息处理程序
    
    BOOL CprocessCtrlDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
        //设置进度条变化范围
        m_progress.SetRange32(0,100);
        //修改进度条颜色
        //::SendMessage(m_progress.GetSafeHwnd(),PBM_SETBARCOLOR,RGB(255,0,0));
        m_progress.SetBarColor(RGB(255,0,0));
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CprocessCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CprocessCtrlDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作区矩形中居中
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CprocessCtrlDlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    
    void CprocessCtrlDlg::OnBnClickedBtnStart()
    {
        // TODO: 在此添加控件通知处理程序代码
        //自动更新
        SetTimer(1,100,NULL);
        //关闭start按钮
        GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE);
        /*int nPos;
        nPos = m_progress.GetPos();
        nPos += 10;
        m_progress.SetPos(nPos);*/
    }
    
    
    void CprocessCtrlDlg::OnTimer(UINT_PTR nIDEvent)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    
        int nPos,nMin,nMax;
        m_progress.GetRange(nMin,nMax);
        nPos = m_progress.GetPos();
        nPos ++;
        if(nPos > nMax)
        {
            //停止定时器
            KillTimer(1);
            nPos = 0;
            //开启start按钮
            GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
        }
        m_progress.SetPos(nPos);
    
        CDialogEx::OnTimer(nIDEvent);
    }
  • 相关阅读:
    June. 26th 2018, Week 26th. Tuesday
    June. 25th 2018, Week 26th. Monday
    June. 24th 2018, Week 26th. Sunday
    June. 23rd 2018, Week 25th. Saturday
    June. 22 2018, Week 25th. Friday
    June. 21 2018, Week 25th. Thursday
    June. 20 2018, Week 25th. Wednesday
    【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
    June.19 2018, Week 25th Tuesday
    June 18. 2018, Week 25th. Monday
  • 原文地址:https://www.cnblogs.com/Malphite/p/10926332.html
Copyright © 2011-2022 走看看