PALM开发教程-第十二章 专业编程技巧 |
| 作者:palmheart 来源:palmheart.net 发布时间:2005-12-21 3:39:54 |
|
它们相应的代码:About窗体,本程序的关于对话框;prefs窗体,一个用来显示优先权的对话框。在这一章我们只是在这两个窗体上添加一个OK按钮以示它们的存在。 文件Calculator.rsrc的内容添加 我们将向窗体添加一个about窗体、一个prefs窗体和一个菜单项。 1. 运行构造器并打开文件Caculator.rsrc; 2. 创建about窗体的框架,我们将拷贝calc窗体然后作一些修改; 3. 选中calc窗体; 4. 选择Edit | Copy并按下CTRL-C拷贝窗体; 5. 选择Edit | Paste并按下CTRL-V将窗体粘贴到构造器上,此时会出现一个对话框显示输入该窗体的ID; 6. 选中Unique ID; 7. 将窗体的名字改为“about”; 8. 双击打开about窗体,进入窗体属性选项; 9. 选中Save Behind,设置title为Caculator; 10. 将按钮向下移动20个象素,避免和calc窗体的按钮重合,这样就可以容易的和calc窗体进行切换。当一切完成后,about窗体应如图12-3所示: 现在创建prefs窗体。拷贝粘贴About窗体并重命名为“prefs”。将title属性改为“Caculator Preference” 将按钮位置在下移20个象素,完成后的窗体应如图12-4所示: 然后添加一个菜单栏使我们可以在两个新建窗体间切换。首先从菜单栏资源类型和列表中创建一个菜单栏并按下CTRL-K,将其命名为“calc”。选择Resource type创建一个新的菜单并按下CTRL-K,并将其命名为“options”。双击打开菜单栏,将一个菜单拖动到菜单编辑框中。将菜单命名为Options,然后按下CTRL-K添加菜单项,并命名为Preferences...,快捷键为“R”。另外一个菜单项命名为About Calculator。设计完成后,菜单栏如下图所示: fabout.c模块 现在开始为我们新建的窗体和菜单添加代码。下面所示的是fabout.c的源代码。它包括了about窗体的事件处理函数以及这些函数的原型。因为在结构上它和fcalc.c十分相似,所以我建议将fcalc.c拷贝,在这样的基础上进行修改。最后别忘了将fabout.c保存在AppSource下面。 ////////////////////////////////////////////////////////////////////////////// // fabout.c // Code for the "about" form. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// ////////////// // Includes // ////////////// #include "app.h" // The definitions for this application /////////////////////// // Global Prototypes // /////////////////////// Boolean aboutFormEventHandler( EventPtr spEvent ); ////////////////////// // Global Functions // ////////////////////// //---------------------------------------------------------------------------- Boolean aboutFormEventHandler( //---------------------------------------------------------------------------- // 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: // Return to the calling form FrmReturnToForm( 0 ); return( false ); // A menu item was selected case menuEvent: // Handle the menu event aboutFormMenuEventHandler( spEvent ); return( true ); } // We're done return( false ); } 在aboutFormEventHandler()中,我们处理了两种类型的事件。如果一有按钮按下,那么就调用FrmReturnToForm()将控制权交给所要引用的窗体。利用这个函数,我们就可以建立一个弹出窗体,它只能由函数FrmPopupForm()引发而不能被FrmGotoForm()所调用。由于about窗体通常都是弹出窗体,所以这样做并不会影响代码的可重用性。 对于菜单事件,我们调用了函数aboutFormEventHandler()。它是我们在app.h中的一个宏定义。在头文件中给出此宏定义,就可以让我们在不同的程序中的菜单上重用此代码。 Fabout.h模块 此头文件和calc的头文件本质上是一致的,所以我们拷贝fcalc.h并将其重命名为fabout.h。将其添加到工程中并放置在AppIncludes下面。修改代码和以下所示一致: #ifndef FABOUT_H #define FABOUT_H ////////////////////////////////////////////////////////////////////////////// // fabout.h // Definitions for the "about" form. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// /////////////////////// // Global Prototypes // /////////////////////// Boolean aboutFormEventHandler( EventPtr spEvent ); #endif // FABOUT_H fprefs.c模块 下面是fprefs.c的源文件。目前该文件除了将“about”改为“fpref”以外,其他的全部和fabout.c相同。将fabout.c拷贝并做相应修改,并添加到AppIncludes下的Calculator工程下面。 ////////////////////////////////////////////////////////////////////////////// // fprefs.c // Code for the "prefs" form. // Copyright (c) 1999, Robert Mykland. All rights reserved. ////////////////////////////////////////////////////////////////////////////// ////////////// // Includes // ////////////// #include "app.h" // The definitions for this application /////////////////////// // Global Prototypes // /////////////////////// Boolean prefsFormEventHandler( EventPtr spEvent ); ////////////////////// // Global Functions // ////////////////////// //---------------------------------------------------------------------------- Boolean prefsFormEventHandler( //---------------------------------------------------------------------------- // Handles events for this form. // Returns true if it fully handled the event. //---------------------------- |
| [] [返回上一页] [打 印] |
|
文章评论 |
