几乎所有的开发语言教程都是以”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的开发方法。
对例子代码进行逐行说明下面:
| 行号 | 说明 |
| 1 | 前面两行为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相关的清除工作。比如保存文件,释放内存等。因为这个示例没有分配内存,所以没有特别的清除工作需要完成。所以可以忽略这个事件。 |
本文介绍了BREWAPI的基础使用方法,通过Hello, World!程序展示了如何创建Applet及响应启动事件来显示文本。文章详细解释了关键代码片段的功能。

633

被折叠的 条评论
为什么被折叠?



