PALM开发教程-第十二章 专业编程技巧 |
| 作者:palmheart 来源:palmheart.net 发布时间:2005-12-21 3:39:54 |
|
x, and V #define ROM_VERSION_3 0x03003000 #endif // MAIN_H 在程序的开始是两个预处理指令:#ifndef MAIN_H和#define MAIN_H,相应的在程序的结尾,也有一个预处理指令:#endif。如果MAIN_H没有定义的话,#ifndef和#endif这对预处理指令就会跳过中间所有的代码,MAIN_H将在它们的内部开始定义。预处理指令的作用就是把编译器已经编译过的内容忽略以防重复编译。 在一些比较大的程序中,为方便起见,在同一个文件中头文件不止被引用一次。这时候就可以将代码分开编译,而不必担心文件中函数到底有没有定义。这些预处理指令就可以避免让编译器花费一些不必要的时间来进行一些重复的编译工作。 在标准的头模块的内容下面是main.c中的函数原型,由于它们和源文件中的函数定义完全相同,所以如果两者间有一点点不同,编译器就会给出错误警告。 在函数的最后是对Palm OS的版本号的常量定义。为了使将来的程序少有版本不符的情况,将版本号在头文件中进行定义是有必要的(如果系统中没有定义的话)。这是因为代表版本号的十六进制数很难引用和理解,如果不定义的话,在将来会造成很多麻烦。 Fcalc.c模块 在fcalc.c中只有一个事件处理函数。创建一个叫fcalc.c的新文件并保存在工程的Src文件夹中。下面是fcalc.c的详细代码。在我们熟悉的头文件声明的代码后,是事件处理函数的函数原型。 ////////////////////////////////////////////////////////////////////////////// // fcalc.c // Code for the "calc" form. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// ////////////// // Includes // ////////////// #include "app.h" // The definitions for this application /////////////////////// // Global Prototypes // /////////////////////// Boolean calcFormEventHandler( EventPtr spEvent ); ////////////////////// // Global Functions // ////////////////////// //---------------------------------------------------------------------------- Boolean calcFormEventHandler( //---------------------------------------------------------------------------- // Handles events for this form. // Returns true if it fully handled the event. //---------------------------------------------------------------------------- EventPtr spEvent ) //---------------------------------------------------------------------------- { // Handle the event switch( spEvent->eType ) { // A control was selected case ctlSelectEvent: // Sound an alarm SndPlaySystemSound( sndAlarm ); return( false ); // A menu item was selected case menuEvent: // Handle the menu event calcFormMenuEventHandler( spEvent ); return( true ); } // We're done return( false ); } 当有按钮按下时,函数发出提示声音 ,当菜单选项被选中时,我们调用函数calcFormMenuEventHandler()来处理,它实际上是定义在app.h中的一个宏,允许我们在其它的程序中选择菜单时也可以调用这个函数。 注意到,当我们按下按钮时函数的返回值是false。这是因为Palm OS还需要进一步的处理按钮按下的图形。记住,一般情况下,当函数返回false时是希望系统忽略这个事件,但是在菜单事件中(memuEvent),如果在处理一个菜单事件后返回false,Palm OS就会发出一声警告声,好像出现了什么错误似的。 当编制这段程序后,我们就可以天衣无缝的将这个程序添加到其它的应用程序中。例如:在一个财政信息软件中,我们可以把它做成一个弹出窗口,再根据主窗口的需要进行计算。 Fcalc.h模块 Fcalc.h是fcalc.c的头文件。创建一个新文件,将其命名为fcalc.h,并保存在Caculator工程的Src文件夹中。 象main.h一样,fcalc.h也有预处理指令#ifdef、#define、#endif等以防止编译器作无用功。Fcalc.h中的代码定义了fcalc.c中函数原型,以保证在调用此函数时,这个函数已定义过并且参数传送正确。 #ifndef FCALC_H #define FCALC_H ////////////////////////////////////////////////////////////////////////////// // fcalc.h // Definitions for the "calc" form. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// /////////////////////// // Global Prototypes // /////////////////////// Boolean calcFormEventHandler( EventPtr spEvent ); #endif // FCALC_H 你或许会问,这样一个头文件中怎么就只定义了一个函数呢?这个问题关键在于我们现在只有一个函数。不过要十分注意的是,我们首先要有一个完整的开始框架,为将来的扩展着想,为以后的代码留出空间。如果永远也不扩展的话也没关系,这样作可以更容易的找到函数。 App.h模块 头文件app.h将前面所有模块的头文件汇总在了一起。创建一个新文件,将其命名为app.h并存放在Src文件夹中。将其添加在工程中,放在AppIncludes中。 下面让我们一步一步的来分析代码: #ifndef APP_H #define APP_H ////////////////////////////////////////////////////////////////////////////// // app.h // Definitions for the application. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// ////////////// // Includes // ////////////// #include <Pilot.h> // All the Palm includes #include "Calculator_res.h" // Resource definitions #include "fcalc.h" // Definitions for the "calc" form #include "main.h" // Definitions for the main entry point app.h看起来和我们以前编辑的头文件十分相似,首先是#ifndef和#define预处理指令,然后是一些头文件的定义。第一个是Pilot.h头文件的定义。由于我们将在所以的源文件中都使用app.h头文件,所以必须在此处定义Pilot.h。下一个是资源头文件。注意到因为Pilot.h是系统头文件,所以 |
| [] [返回上一页] [打 印] |
|
文章评论 |
