新进度条对话框的示例(27_MzPopupProgress)

新进度条对话框

此示例展示以下控件的使用方法:

新进度条对话框 MzPopupProgress使用流程

示例代码展示:

27_MzPopupProgress_1.png

初始化并开始 MzPopupProgress 控件

// 初始化 MzPopupProgress 控件
m_progress.SetRange(0, 100);
m_progress.SetCurrentValue(m_currentVal);
m_progress.SetTitleText(L"剩余时间 10 秒");
m_progress.SetNoteText(L"进度条对话框");
m_progress.StartProgress(m_hWnd, TRUE, FALSE);
// 开启定时器,每100ms刷新一次进度条
SetTimer(m_hWnd, PROGRESS_TIMER_ID, 100, NULL)

定时器触发的消息函数

virtual void OnTimer(UINT_PTR nIDEvent)
{
    if (PROGRESS_TIMER_ID == nIDEvent)
    {
        // 刷新进度条
        m_progress.SetCurrentValue(++m_currentVal);
        if (m_currentVal % 10 == 0)
        {
            WCHAR wstr[10];
            wsprintf(wstr, L"剩余时间 %d 秒", (100 - m_currentVal) / 10);
            m_progress.SetTitleText(wstr);
        }
        m_progress.UpdateProgress(FALSE);

        if (100 == m_currentVal)
        {
            KillTimer(m_hWnd, PROGRESS_TIMER_ID);
            m_progress.KillProgress();
        }
    }
}

完整示例:

/************************************************************************/
/*
 * Copyright (C) Meizu Technology Corporation Zhuhai China
 * All rights reserved.
 * 中国珠海, 魅族科技有限公司, 版权所有.
 *
 * This file is a part of the Meizu Foundation Classes library.
 * Author:    
 * Create on: 2009-12-08
 */
/************************************************************************/

//请按照以步骤运行此实例代码:
//首先, 打开VS2005/2008创建一个Win 32智能设备项目
//在项目向导中选择M8SDK, 并勾选空项目
//然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中
//最后,按照M8SDK的帮助文档,配置项目属性
//现在,可以运行此程序了

// 包含MZFC库的头文件
#include <mzfc_inc.h>

//此代码演示了:
//  创建和初始化应用程序
//  创建和初始化窗体
//  进度条对话框 MzPopupProgress 的使用及其命令消息的处理

#define PROGRESS_TIMER_ID                 111

#define MZ_IDC_TESTTOOLBAR                101

// 从 CMzWndEx 派生的窗口类
class CSampleMainWnd : public CMzWndEx
{
    MZ_DECLARE_DYNAMIC(CSampleMainWnd);
public:
    UiToolBarPro m_ToolBarPro;
    MzPopupProgress m_progress;

    int m_currentVal;

protected:
    // 窗口初始化
    virtual BOOL OnInitDialog()
    {
        // 必须先调用基类的初始化
        if (!CMzWndEx::OnInitDialog())
        {
            return FALSE;
        }

        // 初始化 UiToolBarPro 控件
        m_ToolBarPro.SetID(MZ_IDC_TESTTOOLBAR);
        m_ToolBarPro.SetPos(0, GetHeight() - MZM_HEIGHT_TOOLBARPRO, GetWidth(), MZM_HEIGHT_TOOLBARPRO);
        m_ToolBarPro.SetButton(TOOLBARPRO_LEFT_TEXTBUTTON, true, true, L"Exit");
        m_ToolBarPro.SetButton(TOOLBARPRO_RIGHT_TEXTBUTTON, true, true, L"Progress");
        AddUiWin(&m_ToolBarPro);

        return TRUE;
    }

    // 重载 MZFC 的命令消息处理函数
    virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
    {
        UINT_PTR id = LOWORD(wParam);
        switch (id)
        {
        case MZ_IDC_TESTTOOLBAR:
            {
                int index = lParam;
                if (index == TOOLBARPRO_LEFT_TEXTBUTTON)
                {
                    PostQuitMessage(0);
                }
                else if (index == TOOLBARPRO_RIGHT_TEXTBUTTON)
                {
                    m_currentVal = 0;
                    // 初始化 MzPopupProgress 控件
                    m_progress.SetRange(0, 100);
                    m_progress.SetCurrentValue(m_currentVal);
                    m_progress.SetTitleText(L"剩余时间 10 秒");
                    m_progress.SetNoteText(L"进度条对话框");
                    m_progress.StartProgress(m_hWnd, TRUE, FALSE);
                    // 开启定时器,每100ms刷新一次进度条
                    SetTimer(m_hWnd, PROGRESS_TIMER_ID, 100, NULL);
                }
                break;
            }
        }
    }

    // 定时器触发的消息函数
    virtual void OnTimer(UINT_PTR nIDEvent)
    {
        if (PROGRESS_TIMER_ID == nIDEvent)
        {
            // 刷新进度条
            m_progress.SetCurrentValue(++m_currentVal);
            if (m_currentVal % 10 == 0)
            {
                WCHAR wstr[10];
                wsprintf(wstr, L"剩余时间 %d 秒", (100 - m_currentVal) / 10);
                m_progress.SetTitleText(wstr);
            }
            m_progress.UpdateProgress(FALSE);

            if (100 == m_currentVal)
            {
                KillTimer(m_hWnd, PROGRESS_TIMER_ID);
                m_progress.KillProgress();
            }
        }
    }

};

MZ_IMPLEMENT_DYNAMIC(CSampleMainWnd);

// 从 CMzApp 派生的应用程序类
class CSampleMainApp : public CMzApp
{
public:
    // 应用程序的主窗口
    CSampleMainWnd m_MainWnd;

    // 初始化应用程序
    virtual BOOL Init()
    {
        // 初始化 COM组件
        CoInitializeEx(0, COINIT_MULTITHREADED);

        // 创建窗口
        RECT rcWork = MzGetWorkArea();
        m_MainWnd.Create(rcWork.left, rcWork.top, RECT_WIDTH(rcWork), RECT_HEIGHT(rcWork), 0, 0, 0);
        m_MainWnd.SetBgColor(MzGetThemeColor(TCI_WINDOW_BG));
        m_MainWnd.Show();

        return TRUE;
    }
};

// 全局应用程序变量
CSampleMainApp theApp;

Generated at Tue Feb 9 15:09:55 2010 for Meizu M8 SDK Documentation by  doxygen 1.6.1