新进度条对话框
此示例展示以下控件的使用方法:
新进度条对话框 MzPopupProgress使用流程
MzPopupProgress m_progress;
//设置进度条的最大值和最小值 m_progress.SetRange(0, 100); //设置进度条的当前位置 m_progress.SetCurrentValue(0); //设置进度条的标题 m_progress.SetTitleText(L"剩余时间 10 秒"); //设置进度条的文字内容 m_progress.SetNoteText(L"进度条对话框"); //运行弹出进度条 m_progress.StartProgress(m_hWnd, TRUE, FALSE);
//设置时度条的当前位置 m_progress.SetCurrentValue(50); //更新进度条 m_progress.UpdateProgress(FALSE); //关闭进度条窗口 m_progress.KillProgress();
//开启定时器,每100ms调用一次OnTimer函数。此定时器的标识为PROGRESS_TIMER_ID SetTimer(m_hWnd, PROGRESS_TIMER_ID, 100, NULL); //定时器事件处理 virtual void OnTimer(UINT_PTR nIDEvent) { if (PROGRESS_TIMER_ID == nIDEvent) { ++m_currentVal; //这里处理对于进度条的更新操作 } if(m_currentVal==100) { //满足一定条件下要关闭定时器 KillTimer(m_hWnd, PROGRESS_TIMER_ID); } }
示例代码展示:
初始化并开始 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;