创建基本的MZFC应用程序

MZFC应用程序的基础要点
    MZFC应用是使用C++语言编写的程序,并使用Microsoft Visual Studio 2005(或更高版本)编译链接,可包含代码及资源文件;
    程序编译时需要引用<mzfc_inc.h>头文件,链接时需要引用mzfc.lib文件。

一个MZFC窗口应用程序的结构一般如下
    Application (CMzApp), Window (CMzWndEx), Controls (UiWin)
    如图:
    

mzfc_app_architecture.jpg

如何建立一个MZFC应用程序
一、创建项目
    1、打开VS2005,选择[文件]-[新建]-[项目]
	   

2、选择下一步

new_project_02.jpg
    3、平台选择:选择M8SDK
       

new_project_03.jpg
    4、下一步后选择Windows 应用程序
       

new_project_04.jpg
    5、点击完成后,VS2005自动生成一个程序框架。
二、建立MZFC应用程序
    要想使用Meizu提供的界面库,我们不使用VS2005自动生成的程序框架,删除M8Sample.cpp的所有内容,拷贝下面的示例代码,粘贴到M8Sample.cpp中。
    建立一个MZFC应用程序通常需要以下2个步骤:
    

现在,我们来写一个简单的MZFC应用程序。

    在程序的主窗口创建一个按钮控件,并初始化为显示“Exit!”文字的绿色按钮。
m_btn.SetButtonType(MZC_BUTTON_GREEN);  // 设置按钮类型:绿色按钮
m_btn.SetPos(100,250,280,100);          // 设置控件在位置
m_btn.SetID(MZ_IDC_TESTBTN1);           // 设置ID
m_btn.SetText(L"Exit!");                // 设置控件的显示文本
m_btn.SetTextColor(RGB(255,255,255));   // 设置控件文本的颜色

AddUiWin(&m_btn);                       // 把控件添加到窗口中
    然后,重载命令消息的处理函数 CMzWndEx::OnMzCommand(WPARAM wParam, LPARAM lParam) 对控件的消息进行处理。
virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
{
  UINT_PTR id = LOWORD(wParam);
  switch(id)
  {
  case MZ_IDC_TESTBTN1:          // 响应按钮命令
    {
      if(1 == MzMessageBoxEx(m_hWnd, L"Really want to exit?", L"Exit", MB_YESNO, false))
        PostQuitMessage(0);     // 退出程序
    }
    break;
  }
}
    完整的示例代码如下:
//包含MZFC库的头文件
#include <mzfc_inc.h>

// 按钮控件的ID
#define MZ_IDC_TESTBTN1  101

// 从 CMzWndEx 派生的主窗口类
class CSampleMainWnd: public CMzWndEx
{
  MZ_DECLARE_DYNAMIC(CSampleMainWnd);
public:
  // 窗口中的按钮控件
  UiButton m_btn;

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

              // 初始化窗口中的控件
    m_btn.SetButtonType(MZC_BUTTON_GREEN);
    m_btn.SetPos(100,250,280,100);
    m_btn.SetID(MZ_IDC_TESTBTN1);
    m_btn.SetText(L"Exit!");
    m_btn.SetTextColor(RGB(255,255,255));

              // 把控件添加到窗口中
    AddUiWin(&m_btn);

    return TRUE;
  }

  // 重载命令消息的处理函数
  virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
  {
    UINT_PTR id = LOWORD(wParam);
    switch(id)
    {
    case MZ_IDC_TESTBTN1: // 响应按钮命令
      {
        if(1 == MzMessageBoxEx(m_hWnd, L"Really want to exit?", L"Exit", MB_YESNO, false))
          PostQuitMessage(0);
      }
      break;
    }
  }
};

MZ_IMPLEMENT_DYNAMIC(CSampleMainWnd)

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

  ~MyApp()
  {
    // 析构时删除主窗口指针
    if(m_pMainWnd!=0)
      delete m_pMainWnd;
  }

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

              // 创建主窗口并显示
    RECT rcWork = MzGetWorkArea();
    m_pMainWnd = new CSampleMainWnd;
    m_pMainWnd->Create(rcWork.left,rcWork.top,RECT_WIDTH(rcWork),RECT_HEIGHT(rcWork), 0, 0, 0);
    m_pMainWnd->Show();

              // 成功则返回TRUE
    return TRUE;
  }
};

// 全局的应用程序对象
MyApp theApp;
三、运行程序
    1、配置项目设置
       

2、使用MZFC的静态连接库

       随着固件版本的不断升级,MZFC 中某些函数接口可能会改变,如果使用动态链接mzfc.dll,会造成使用旧版SDK 编译生成的应用程序无法在新版的固件中正确运行,为
    了解决这一问题,开发者可以选择静态链接MZFC 库:
       

3、编译生成应用程序

四、调试程序
    1、使用模拟器调试应用程序
       

2、使用M8调试应用程序


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