魅族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; }
也截个图,还是挺漂亮的:)
二.为窗体添加和删除控件
现在的UI框架,若无控件怎么算是一个框架呢,不过没有像开发WinForm这么幸福,无法拖拉.只能通过代码来.
MZFC的控件基类为UiWin,如WinForm的Control类一般,不要期待MZFC能提供如微软那么多的控件给你,只有基本的,连checkbox,radiobutton等都没有,基本控件都很简单很弱,还好挺好看的,只能期待SDK的更新了
窗体定义了两个方法来添加和删除控件,记得参数是指针类型
三.添加一个按钮控件
下面来测试往窗体中添加一个按钮
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添加到窗体中.再次截图
四.事件处理
放按钮不是摆设的,点下去是要做事情的,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能被我讲成这样:)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现