`
mmdev
  • 浏览: 12925151 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

BREW开发教程(6):BREW “Hello,World!”应用示例

 
阅读更多

几乎所有的开发语言教程都是以”Hello,world”应用程序作为第一个例子。“Hello,world!”例子显示了BREW API最基本的使用方法。

注意:下面的示例代码仅仅是用来显示BREW API的基本用法,这个程序可能并不能通过TRUE BREW测试,这是因为这个示例程序并不完全。

1. #include “AEEAppGen.h” // Applet helper file
2. #include “helloworld.bid” // Applet-specific header that
3. // contains class ID
4
5. static boolean HelloWorld_HandleEvent(AEEApplet * pme, AEEEvent
6. eCode,uint16 wParam, uint32 dwParam);
7
8. // Applet loading function
9. int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule *
10. pMod,void ** ppObj)
11. {
12. *ppObj = NULL;
13
14. if(AEEApplet_New( sizeof(AEEApplet), // Size of our private
15. // class
16. ClsId, // Our class ID
17. pIShell, // Shell interface
18. pMod, // Module instance
19. (IApplet**)ppObj, // Return object
20. (AEEHANDLER)HelloWorld_HandleEvent, // Our event handler
21. NULL)) // No special “cleanup” function
22. return(AEE_SUCCESS);
23
24. return (EFAILED);
25. }
26
27. // The event handling function
28. static boolean HelloWorld_HandleEvent(AEEApplet * pMe, AEEEvent eCode,
29. uint16 wParam, uint32 dwParam)
30. {
31. AECHAR szText[] = {‘H’,'e’,'l’,'l’,'o’,’ ‘,’W',’o', ‘r’, ‘l’, ‘d’,
32. ‘\0′};
33
34. switch (eCode){
35. case EVT_APP_START:
36. IDISPLAY_DrawText(pMe->m_pIDisplay, // Display instance
37. AEE_FONT_BOLD,// Use BOLD font
38. szText, // Text – Normally comes from
39. // resource
40. -1, // -1 = Use full string length
41. 0, // Ignored – IDF_ALIGN_CENTER
42. 0, // Ignored – IDF_ALIGN_MIDDLE
43. NULL, // No clipping
44. IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
45. IDISPLAY_Update (pMe->m_pIDisplay);
46
47. return(TRUE);
48
49. case EVT_APP_STOP:
50. return(TRUE);
51
52. default:
53. break;
54. }
55. return(FALSE);
56. }

上面的示例代码使用了BREW SDK提供的Applet桩代码文件(AEEAppGen.c和AEEModGen.c)。这个文件将和上面的代码一起编译和链接。这些桩代码提供了支持IModule和IApplet接口所必需服务接口,一般在所有的BREW应用开发时都必需包含这两个文件,这使得开发人员只需要简单的关注通过HandleEvent函数传给Applet事件的处理。开发都可以选择直接实现IModule和IApplet接口以满足实际需求。

在例子中,Applet在接收到EVT_APP_START事件之后显示”Hello,World!”,这个消息是在BREW启动Applet通过Applet的HandleEvent函数发给应用程序的。这个例子显示“Hello,World”并通知显示设备刷新屏幕。

如果熟悉Window SDK编程的话,上面的例子和Window SDK编程方法基本类似。也非常容易掌握BREW的开发方法。

对例子代码进行逐行说明下面:

行号 说明
前面两行为Hello,world应用所使用的头文件,AEEAppGen.h中定义了Applet函数。
2 Helloworld.bid包含了Applet唯一的ClassID AEECLSID_HELLOWORLD.这个Class Id是通过高通公司接口注册过程得到的。
5-6 为Applet的事件处理函数HandleEvent的事先声明。
9-25 这几行代码是所有模块都必需提供的载入代码,相当于程序的入口点。Hello world应用是作为动态库DLL被模拟器调用的,这种模式是设备上亦是一样的。函数AEEClsCreateInstance()的作用是为AEEApplet结构创建一个实例,这个结构通过AEEApplet_New()函数来创建,并设定应用特定的事件处理函数。第一个参数为Applet 数据结构的大小,因为在这个应用中没有其它变量,所以直接使用了AEEApplet数据结构大小。可以参见其它例子来了解如果使用AEEApplet_New()。
28-56 HelloWorld_HandleEvent()函数处理Applet收到的所有事件,主事件类型,子事件类型以及事件相关数据通过参数eCode,wParam,dwParam来传递。

34行的switch函数查看Applet收到主事件类型。

如果事件是EVT_APP_START,则Applet收到了启动消息。

IDISPLAY_DrawText()用于在屏幕中间显示字符串”Hello,world!”,标识IDF_ALIGN_CENTER 和IDF_ALIGN_MIDDLE用于在水平和垂直方向将字符串居中。

IDISPLAY_Update()用于刷新屏幕。

当用户按下设备上的”END”键时,Applet将收到EVT_APP_STOP事件。当Applet收到此事件时,需要做Applet相关的清除工作。比如保存文件,释放内存等。因为这个示例没有分配内存,所以没有特别的清除工作需要完成。所以可以忽略这个事件。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics