代码改变世界

魅族m8开发 step by step(2)(hello world)

2009-11-14 23:27  Clingingboy  阅读(526)  评论(0编辑  收藏  举报

    接上篇,每个程序都会有MessageBox,MZFC也是如此,但进行的美化,其函数名为MzMessageBoxEx

一.MZFC的新MessageBox(MzMessageBoxEx)

/**
*    @brief提示对话框
*    @param hWnd [in] 窗口句柄
*    @param content [in] 提示的内容
*    @param title    [in] 标题(目前设置标题是无效的)
*    @param nType    [in] 显示的按钮类型
*     MZ_OK    、                  
*     MZ_OKCANCEL   、           
*     MZ_ABORTRETRYIGNORE   、   
*     MZ_YESNOCANCEL   、        
*     MZ_YESNO     、             
*     MZ_RETRYCANCEL  
*    @param nHomeKeyReturnValue    [in] 设置此窗口在收到Home键时的返回值
*    @return 返回按下的按钮,YES:1,NO:2,OK:1,RETRY:1,CANCEL:2,ABORT:2,IGNORE:3
*/
int MZFC_API MzMessageBoxEx( HWND hWnd, const TCHAR* content, const TCHAR *title, int nType  = MZ_OK , int nHomeKeyReturnValue = SHK_RET_DEFAULT  );


c/c++复习知识
1.句柄(MessageBox必须包含一个窗体句柄)
2.宽字符(char,wchar_t,TCHAR,WCHAR) 这点知识可以参考Windows程序设计 第二章,有详细介绍

还可以参考这篇http://www.cnblogs.com/DonkeyWugui/archive/2009/08/20/1550291.html

说实话我很不喜欢c/c+对类型重新定义,搞来搞去就这么几个类型,为了不同框架,就重新自己定义,千头万绪啊.都是typedef惹的祸,这可能就是c/c++的风格吧,很痛苦的去接受,还有#define的全局定义…,能定义一个静态类多好...

下面我们在窗体里实际跳出一个弹出框(标题将不显示)

 virtual BOOL OnInitDialog()
 {
   if (!CMzWndEx::OnInitDialog())
   {
     return FALSE;
   }
   MzMessageBoxEx(m_hWnd, L"Hello World", L"Exit", MB_OK, false);
   return TRUE;
 }


也截个图,还是挺漂亮的:)

image

二.为窗体添加和删除控件

现在的UI框架,若无控件怎么算是一个框架呢,不过没有像开发WinForm这么幸福,无法拖拉.只能通过代码来.

MZFC的控件基类为UiWin,如WinForm的Control类一般,不要期待MZFC能提供如微软那么多的控件给你,只有基本的,连checkbox,radiobutton等都没有,基本控件都很简单很弱,还好挺好看的,只能期待SDK的更新了

image

窗体定义了两个方法来添加和删除控件,记得参数是指针类型

image

三.添加一个按钮控件


下面来测试往窗体中添加一个按钮

class CSample1MainWnd: public CMzWndEx
{
 public:
  UiButton m_btn;

protected:
 virtual BOOL OnInitDialog()
  {
    if (!CMzWndEx::OnInitDialog())
    {
      return FALSE;
    }
    // 设置控件位置
m_btn.SetPos(100,250,280,100); m_btn.SetText(L"Hello MZFC!"); // 把控件添加到窗口中 AddUiWin(&m_btn); return TRUE; } } };

SetPos属于基类方法,设置控件位置,其他具体方法还可以参考SDK.设置完相关属性后,用AddUiWin添加到窗体中.再次截图

image

四.事件处理


放按钮不是摆设的,点下去是要做事情的,MZFC的事件机制基于原始的消息机制,但是没有消息事件映射,所以很麻烦,得写很多case

(1)为控件分配唯一ID标识符

m_btn.SetID(MZ_IDC_TESTBTN1);


(2)重载窗体类的OnMzCommand方法(WM_COMMAND)

virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
{
  UINT_PTR id = LOWORD(wParam);
  switch(id)
  {
  case MZ_IDC_TESTBTN1:
    {
        MzMessageBoxEx(m_hWnd, L"Hello World", L"Exit", MB_OK, false);
    }
    break;
  }
}


再次点击这个按钮就会弹出一个很可爱的弹出框了.

应该算是step by step,很简单了,一个很简单的Hello MZFC能被我讲成这样:)