《M8 program 第二天》好了,继续只是看教程,转一篇魅族官网软件专区的文章

http://bbs.meizu.com/thread-849749-1-4.html

 

 

寒暄客套的话:
应超级版主gzdanny的邀请,很高兴能跟大家分享我学习VC++和M8 SDK的一些心得体会,这两样东西都是我在买到M8后开始学习的,我之前常用的开发语言包括PHP、C#等,所以如果在下面的内容中有错误,请大家一定要不吝赐教!

我尝试通过一个简单的范例来说明整个开发过程,并将SDK里面常用的东西应用到里面,当我们每完成一篇的内容,学会加入更多的东西,这个范例就变得更好玩。我也会尝试将我在代码编写上的一些经验分享给大家,希望大家一起讨论。版主也告诉我,其他一些专门的应用话题(例如重力或者DX高速绘图)会邀请其他开发高手来发表,所以,我就只做入门部分好了!

我会留出4楼来回答各位网友的问题,如果你有任何疑问或建议,欢迎你跟帖提出。

当然,在这第一帖,我们需要先建立我们的开发环境,并开始写第一个简单的程序。

知识点:


  • 开发环境搭建;
  • 在VS中建立一个M8SDK的项目;
  • M8 SDK应用程序的基本架构(第一个应用程序)


注意,这3个知识点中,前两个如果你已经仔细阅读过SDK的帮助,并且你也都搞明白了的,那就不要看我废话了,请直接跳到3楼去,不过在第二点建立项目那里,我的方法跟SDK的帮助有一点点不同,欢迎大家比较下。

开发环境搭建:
我不打算浪费大家的时间,如果连软件安装都有困难,那我不建议你继续往下看了。
关于环境搭建,这里我有几个提醒:


  • M8 SDK的是用VS2005生成的,所以在VS2005上安装很容易,直接装完就可以了;
  • 但如果你使用VS2008的话,注意在安装SDK时要用自定义安装,并不要选“文档”部分即可,不用担心,文档还是会解压到你的SDK安装目录下,没有任何损失!(你可以在C:/Program Files/Windows CE Tools/wce600/M8SDK/Samples 找到那6个chm文件)
  • M8的SDK还在不断更新,请留意SDK的文档说明,有些早期的内容也许会在新的SDK中被抛弃,903的SDK就试过取消了一个UI控件。当然,更多常见的情况是,新的SDK增加很多新的接口,让我们更方便地跟M8系统交互。
  • 所以每次出新版的SDK,需要完全卸载旧的SDK再装新的,你的程序最好也清理解决方案一次然后重新编译,否则会出现很奇怪的问题。(这是由于SDK更新后,需要强制VS对代码进行编译才能使用新的SDK的库)
  • SDK的M8模拟器带的那个皮肤实在太高了(你还在为M8的超高分辨率窃喜吗),建议大家下载网友“洛泺”做得皮肤,直接覆盖到C:/Program Files/Windows CE Tools/wce600/M8SDK/Emulation/Skins/1 目录下即可,这是几个修改版皮肤中我认为最好的一个。 [http://bbs.meizu.com/viewthread.php?tid=765263]
  • 关于VS2005 SP1安装问题,如果你先装VS2005,再装SP1,也许你就会遇到一个严重问题:你等在电脑前很久,都还没装完SP1,这个问题在VS2008不会出现,网络上你可以搜到很多帖子讲怎么解决这个问题,但我建议是,不要浪费时间,最好是自己做个VS2005SP1的整合光盘(或找个可靠的网站下载一个),直接安装,安全快捷,没有垃圾。
  • 哦,对了,你应该知道我们要装VS中的VC++吧?至于其他部件,那就随便你咯!
  • 最后,是入门书籍,对于VC++,我推荐的是《Visual C++ 2005 入门经典》,你可以当它是一本工具书,需要的时候才去查相关的章节,对于我们这种已经有其他类C语言基础而又没有VC++入门的“菜鸟”最合适了!至于CE开发和CE API的问题,没有什么比MSDN最完美的了,当然,我相信还有我们这个魅族论坛上众多的高手随时愿意解答大家的问题!



回顾整理下我们需要预备的软件:



好了,到此为止,你已经搭建好你的开发环境了,我们赶紧开始第一个程序吧!
在VS中建立一个M8SDK的项目:

现在,我们先在VS里创建一个项目,请按下面的图片跟我一起做:


  • 我们要选“VC++”->“智能设备”,在右边选“Win32智能设备项目”,下面按你自己喜欢输入项目名称和解决方案名称,确定进入下一步。
  • 你会发现当前设置是WM5,这是VS2008自带的,我们需要M8而不是WM5,所以这里要点下一步;
  • 好,我们把“M8SDK”从左边窗口加到右边,另外把我们不要的WM5移回左边,就像下面的图一样,然后下一步;
  • 我们不需要VS为我们生成任何的代码(VS也不懂),所以我们选“Windows应用程序”和下面的“空项目”,这时,终于可以点完成了!
  • 回到VS的主界面,你发现在右边已经有一个空的项目,如果你按我上面的设置,那么你会看到“Sample01”。我们右击“Sample01”这个项目(注意不是右击解决方案),选最下面的属性,我们还有最后一个设置要做;
  • 选中左边的“配置属性”->“链接器”->“输入”,在右边的“附加依赖项”里填入“mzfc.lib”,点击确定,我们就完成了。



这里稍微说明下,我的这个过程跟SDK的帮助有一点点不同,主要是这里的第4点和第6点:


  • 在上面第4点里,我用了“空项目”,这个很简单,帮助里后面要我们把VS生成的cpp删了,其实选空项目就好了。没必要生成又删掉,对吧?(这是完美主义的罪!)
  • 在上面第6点里,“附加依赖项”,我只填了mzfc.lib,因为暂时我们只需要用这个,其他的不需要用到,就不要加进去了。(又是完美主义的罪!)


以上内容比较简单,但是我希望通过这个过程,新手能明白每一步我们为什么这么做,所谓知其所以然啦!

好啦,下面真的开始写程序了,一切都预备好了!(别急着把M8接到你的电脑上,至少目前我们还不需要这么做!)

我们首先右击项目Sample01下的“源文件”目录,在弹出菜单选“添加”->“新建项”,然后在弹出的窗口中左边选择“代码”,右边选“C++文件”,我决定继续用“Sample01”作为这个源代码的文件名。



然后我们双击这个新的Sample01.cpp,里面是空白一片,你可以下载这个附件,用记事本打开将里面的内容全选复制,然后粘贴到里面(当然你也可以把压缩包里的文件直接替换掉项目目录下的那个Sample01.cpp)
Sample01.rar (892 Bytes)



然后,点击下上面工具栏里的那个绿色三角,开始“调试运行”,第一次你得耐心点,因为M8模拟器启动需要非常长的时间(我在一台赛扬1.4G,2G内存的机器上写这篇帖子),然后你会看到一个红色的全屏(上面有状态栏显示时间和电池容量),这就是我们这个程序所做的,显示一个红色背景的窗口!点击模拟器旁边的“M”键可以退出这个程序并返回VS。



OK,我承认这个范例实在不怎么激动人心,即使我已经用了让人热血沸腾的红色!现在是半夜3点,估计我的眼睛也红得差不多了。

不过这就是我们的第一个M8程序,为了更清楚说明下面的内容,我把SDK里自带的第一个范例改了一下,使结构更清晰一些,所以,先将就下好吗?

然后,下面我们开始来学怎么写一个M8 SDK的程序!
M8 SDK应用程序的基本架构(第一个应用程序):


现在你已经根据上面的二楼内容,写了这个Sample01使M8模拟器的屏幕变成了红色!我们先来看看一个M8的应用程序最基本的结构吧:

请看下图,我把Sample01.cpp里的一些代码折叠了,以便你更清楚地看到这个程序的结构:

 


  • 首先是个include,我们需要用到MZFC的库,这个没啥好说的,这是M8 SDK中最常用的一个库
  • 这个程序只有两个类,一个是MainWnd (继承CMzWndEx),一个是M8App(继承CMzApp),现在请你打开你的SDK目录下的帮助文件(默认应该在: C:/Program Files/Windows CE Tools/wce600/M8SDK/Samples/Meizu M8 MZFC Documentation (CHS).chm)
  • 我们找到帮助里CMzApp的条目,这里说,所有M8应用程序都应该从这个类派生出来,是的,就是这样,所有的M8应用程序都要设计一个类,继承CMzApp,然后将这个派生的类实例化,这个类的Init()就是整个程序的入口了!
  • 由于我们做的是可视化的程序,也就是我们至少得有个窗口,所以,我们需要再写一个类MainWnd,并且继承了CMzWndEx,这是M8的窗口,包含很多特别的UI特性,SDK已经帮我们都做好了,我们只需要继承它,就可以得到一个M8UI的窗口了。
  • 然后我们在M8App这个类里开始我们的程序,首先是把MainWnd实例化,然后在Init()里,对它进行初始化并显示出来,我在附件每一句前面都加了注释,大家可以看看,有不明白的可以在下面跟帖提问,我尽量解答吧。
  • 好了,这个M8App就是这么简单,只需要重写一个方法,Init(),其他的直接继承CMzApp,让SDK去做好了。在Init里,除了第一句,这是必须写的,我估计是跟M8系统多进程协调有关的;后面三句就是我们自己的初始化窗体并显示的代码了;最后就是返回一个True表示初始化成功了。
  • 我们再来看窗体类MainWnd,这个类里第一句代码是一个预定义的宏,SDK帮我们生成一段代码,让我们的这个窗口类能返回正确的名称属性,这句以后我们也是照抄就是了(记得把参数改下哦);
  • 然后同样,我们需要重载初始化方法,OnInitDialog(),这个你也可以在帮助文件里找到说明的,在这个方法里,M8要求我们必须先调用基类的初始化方法,成功了才可以进行我们自己的初始化工作,毫无疑问,以后凡是写窗体类,照抄就是了。
  • 然后就是我们自己的初始化代码,我只做一件简单的事,把窗体背景设成了红色。(SetBgColor这个方法你也可以在CMzWndEx下面找到)
  • 最后返回一个True表示初始化成功。


回顾下,这就是每个M8程序的基本结构了,甚至以后你可以用这个来做你程序的模板,因为这几乎是最精简的了(只有一个窗体,好让你看清楚它的基本结构),之后你会看到我们这个程序不断被扩展,但整个结构都离不开这样的形式。

M8的程序中,你可以有很多窗体,每个窗体可以包含很多控件,还可以处理很多不同的交互消息(甚至你要是足够变态,可以写很多个CMzApp的派生类,但记住每次运行只实例化一个就好了,不然我真不知道会发生什么事),但总离不开这样的基本结构,并且,有些代码是SDK规定必须这样使用的,所以说,这是个模板。

在我还没写完下一篇帖子前,你可以先仔细看看刚才我们用到的那个SDK文档,每个类的方法和属性大致了解下,至少知道M8的SDK给我们提供了一些什么东西,不过不需要背下来,大搞有个印象就可以了,用的时候,那个文件不会跑掉的!

在下一篇帖子里,我们开始对这个无聊的程序进行润色,我们会加入一些好玩的功能,当然,我们不会在下一篇就把它弄成斗地主或平衡球,不过,自己亲手做的,总是会感觉比较好玩的,你说对吗?!

引用:
原帖由 止水轻扬 于 2009-3-14 08:33 发表
我有一个问题,不过不是关于这篇帖子的,而是关于软件开发入门的疑惑。
是这样子的,我已经学过C和C++了,也曾经学过Visual C++ 6.0编程,但是庞大到变态的MFC让我崩溃,而且C和C++的语法我都能看懂(m8SDK的sample ...

MFC只是MS提供的一个封装而已,如果你看了抓狂,就不去看咯(不用MFC也能开发啊,只是自己调API,似乎累了点);

同样,MZFC也是魅族提供的封装而已,很多网友没用MZFC也写出不少好东西,你看那些升级固件不需要重新发布的基本上就是没怎么用MZFC的了。

就M8开发来说,如果只是入门,那么使用SDK里的东西基本上就够用了,稍后你看我发的教程里,也会发现我们可以只用很少的东西就写出程序了。

我自己的方法是:
先定一个触手可及的目标,然后根据需要去查资料,这样上手比较快,不要为学习而看资料,要为需求查资料,这是我自学的方法,因为自学,不是为考试,用不到的知识点,不知道也无所谓,对吧?

—————————————————————

引用:
原帖由 tanzhen21 于 2009-3-14 13:07 发表
非常感谢大侠的文章!
我之前是用VB的,现在开始学习C++,主要是因为我买了部M8手机,准备为M8写点程序。之前论坛也有不少的教程,也天天在学习研究,但还是有很多搞不明白的,看了你的这篇图文并茂的文章,有使我有 ...

按你这么说,窗体创建你已经掌握了,现在的问题是,你说的多窗体之间的关系是什么,你需要在什么时候将特定窗体show出来(如果是被遮挡了,用show的参数bBringTop就可以了。),这是程序逻辑问题了,也就是说问题只是你要做什么,而不是怎么做(你已经知道怎么做了。)

—————————————————————

引用:
原帖由 googlexxl 于 2009-3-14 20:31 发表
老师好,我是个初学者,按照你的做法我都做了一篇sample01的,但是出来的m8模拟器点m键关不掉

非常好的问题,实际上并不是关不掉,而是模拟器的速度太慢了,慢到你会没有耐性等它刷新屏幕。

实际上,点击M键后(别点太快,模拟器也许会反应不过来,按下后等半秒再松开比较可靠),你可以看到VS已经退出调试运行,说明程序已经结束了。

PS:我不是老师,我跟你一样只是个喜欢M8的人,

—————————————————————

引用:
原帖由 linkjam 于 2009-3-15 22:41 发表
可否问楼主个问题,安装过程中出现的问题,我的系统是VISTA,装的VC++2008速成版……结果提示我没安装VS2005,是我安装的速成版的问题吗?完整版才能解决问题??

是的,express版不支持移动设备开发,所以不能用。

—————————————————————

引用:
原帖由 zf_ddt 于 2009-3-17 12:46 发表
个人喜欢将类的函数定义和实现代码分成.h和.cpp文件,现在MZ的示例全部是一个文件中的。我不喜欢,找得累。

好象分开

形式是死的,人是活的,大的应用当然应该分开,几十行的代码就不必了。分与不分只是习惯问题而已,不影响代码的正确性。不过这位网友好像也做了开源的作品,谢谢你的付出啊!学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值