进度条对话框示例(09_ProgressDlg)

进度条对话框

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

进度条控件MzProgressDialog使用流程


09_ProgressDlg.png

进度条的使用:

  m_ProgressDlg.BeginProgress(m_hWnd);
  for (int i=m_ProgressDlg.GetCurValue();i<100;i++)
  {
    //创建当点击取消时,要向消息主窗体发送的消息值
    UINT iMessage = MZ_WM_BREAK | m_ProgressDlg.GetCurValue();              
    m_ProgressDlg.SetButtonMessage(iMessage);
    m_ProgressDlg.SetCurValue(i);                                   
    //每走一秒更新进度条的title
    if(i%10 == 0)         
    {
      WCHAR wstr[10];
      wsprintf(wstr,L"剩余时间%d秒",(100-i)/10);
      m_ProgressDlg.SetTitle(wstr);
    }
    m_ProgressDlg.UpdateProgress();
    //判断用户是否有点击取消按钮
    if(!m_ProgressDlg.IsContinue())
    {
      UINT ii = m_ProgressDlg.GetCurValue();                                            
      m_ProgressDlg.EndProgress();
      break;
    }
    Sleep(100);
  }
  m_ProgressDlg.EndProgress();
  m_ProgressDlg.SetCurValue(0);
  m_Caption.SetText(L"初始值:0");
  m_Caption.Invalidate();
  m_Caption.Update();

完整示例:

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

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

//包含头文件
#include <mzfc_inc.h>
#include <mzfc\MzProgressDialog.h>
#include "resource.h"

//此代码演示了:
//创建和初始化应用程序
//创建和初始化窗体
//如何使用MzProgressDialog
//如何使用Icon toolbar, Caption
#define                     MZ_IDC_TOOLBARICON                        101
#define                     MZ_IDC_CAPTION                                          102
#define                     MZ_WM_BREAK                               0x10000                     //进度条窗体向主窗体发送的消息,高字为1,低字保留存放其他信息
class CSampleWnd_ProgressDlg:public CMzWndEx
{
public:
  UiToolbar_Icon m_ToolBarIcon;
  UiCaption m_Caption;
  MzProgressDialog m_ProgressDlg;
protected:
  virtual BOOL OnInitDialog()
  {
    if (!CMzWndEx::OnInitDialog())
    {
      return FALSE;
    }
    //初始化Icon toolbar
    m_ToolBarIcon.SetID(MZ_IDC_TOOLBARICON);
    m_ToolBarIcon.SetPos(0,GetHeight()-MZM_HEIGHT_ICON_TOOLBAR,GetWidth(),MZM_HEIGHT_ICON_TOOLBAR);
    m_ToolBarIcon.SetButtonCount(4);
    m_ToolBarIcon.LoadButtonIcon(0,MzGetInstanceHandle(),RT_RCDATA,MAKEINTRESOURCE(IDR_PNG_BACK));
    m_ToolBarIcon.LoadButtonIcon(3,MzGetInstanceHandle(),RT_RCDATA,MAKEINTRESOURCE(IDR_PNG_PLAY));
    m_ToolBarIcon.SetHighLightButton(-1); 
    AddUiWin(&m_ToolBarIcon);

    //初始化caption, caption用来显示进度条前进的位置, 按百分制显示。
    m_Caption.SetID(MZ_IDC_CAPTION);
    m_Caption.SetPos(0,0,GetWidth(),100);
    m_Caption.SetText(L"初始值:0");
    AddUiWin(&m_Caption);

    //初始化进度条
    m_ProgressDlg.SetRange(0,100);
    m_ProgressDlg.SetCurValue(0);
    m_ProgressDlg.SetButtonText(L"暂停");
    m_ProgressDlg.SetWindowHeight(MZM_WIDTH_SMS_CONTENT);
    m_ProgressDlg.SetShowTitle(true);
    m_ProgressDlg.SetShowInfo(true);
    m_ProgressDlg.SetInfo(L"进度条实例代码");
    return TRUE;
  }
  virtual LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
  {
    int i = HIWORD(message);
    printf("%d,%d,%d\n",i,LOWORD(message),message);
    switch(HIWORD(message))
    {
      //用户点击进度条的取消按钮。message的高字为1表示“取消”,低字用来存放进度条的当前值。
    case 1:
      {
        INT16 curValue = LOWORD(message);
        WCHAR wstr[15];
        wsprintf(wstr,L"初始值:%d",curValue);
        m_ProgressDlg.SetCurValue(curValue);
        m_Caption.SetText(wstr);
        m_Caption.Invalidate();
        m_Caption.Update();
      }
      break;
    }
    return CMzWndEx::MzDefWndProc(message, wParam, lParam);
  }
  virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
  {
    switch(LOWORD(wParam))
    {
    case MZ_IDC_TOOLBARICON:
      {
        switch(lParam)
        {
        case 0:
          {
            PostQuitMessage(0);
          }
          break;
        case 3:                           //用户点击图标按钮,开始运行进度条
          {   
            m_ProgressDlg.BeginProgress(m_hWnd);
            for (int i=m_ProgressDlg.GetCurValue();i<100;i++)
            {
              //创建当点击取消时,要向消息主窗体发送的消息值
              UINT iMessage = MZ_WM_BREAK | m_ProgressDlg.GetCurValue();                          
              m_ProgressDlg.SetButtonMessage(iMessage);
              m_ProgressDlg.SetCurValue(i);                                                                     
              //每走一秒更新进度条的title
              if(i%10 == 0)               
              {
                WCHAR wstr[10];
                wsprintf(wstr,L"剩余时间%d秒",(100-i)/10);
                m_ProgressDlg.SetTitle(wstr);
              }
              m_ProgressDlg.UpdateProgress();
              //判断用户是否有点击取消按钮
              if(!m_ProgressDlg.IsContinue())
              {
                UINT ii = m_ProgressDlg.GetCurValue();                                                                                      
                m_ProgressDlg.EndProgress();
                break;
              }
              Sleep(100);
            }
            m_ProgressDlg.EndProgress();
            m_ProgressDlg.SetCurValue(0);
            m_Caption.SetText(L"初始值:0");
            m_Caption.Invalidate();
            m_Caption.Update();
          }
          break;
        }
      }
      break;
    }
    return;
  }
};

class CSampleApp: public CMzApp
{
public:
  //主窗体
  CSampleWnd_ProgressDlg m_MainWnd;
  //初始化应用程序
  virtual BOOL Init()
  {
    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;
  }
};

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

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