敬业的IT人 >> 编程开发 >> 其他语言 >> Palm OS应用程序设计指南之二

Palm OS应用程序设计指南之二

敬业的IT人 互联网 佚名 2008-2-19 8:42:38

  在这一节中,我们将通过讨论前文中的Hello应用程序的副本,来研究文本框的属性和事件。涉及的内容包括文本框如何调用Palm OS存储器和处理它们之间的关系等。我们也将花些时间讨论与文本框相关的其它一些内容:

  ◆手写输入转换指示器(Graffiti shift indicators)

  ◆字符串资源(String resources)

  ◆编辑菜单的特殊之处和普通菜单

  ◆Palm OS 版本可兼容代码

  ◆错误信息和警告

  文本框究竟是什么?

  文本框其实就是一个编辑框(单行可编辑的),利用它你可以让你的用户输入文字或数据。让我们来创建一个文本框并感受学习的乐趣吧。

  先在Code Warrior集成开发环境中创建一个应用程序:

  1.运行Code Warrior集成开发环境。

  2.选中菜单File | New Project来创建一个新的项目。

  3.从项目选项中选出Hello应用程序,并重命名为你的新应用程序的名称。

  4.从项目中移走原来的资源文件。你可以这样操作:在Src文件夹中用右键点击Hello.rsrc,选中Remove Selected Items。

  5.到你的项目文件夹的Src目录下删除Hello.rsc。

  6.运行资源构造器(Constructor)来创建一个资源文件。

  7.在资源列表中选取窗体并按Ctrl+K,创建一个名为Contact Detail的窗体。点击默认名称并重新命名窗体。

  8.双击窗体以打开该窗体进入编辑状态。

  9.向窗体中拖放一个文本框。你可以选中菜单Window\Catalog来打开目录窗口。然后从目录窗口中拖动一个文本框控件放到窗体中。

  10.命名文本框名为FirstName。你可以这样操作:点击该文本框来显示它的属性,在窗体的左边方框会出现一个窗口,点击Object Identifier属性,然后输入FirstName。

  11.在这一步,最好把手写输入转换指示器(Graffiti shift indicators)放到你的窗体中。从目录窗口中拖动一个手写输入转换指示器控件放到窗体中,这个转换器的标准位置应放在窗体的右下角。

  12.按以上操作后,窗体显示如图3-1所示。

  13.回到Code Warrior集成开发环境中,在项目中加入一个新的资源文件。在Code Warrior集成开发环境中选中Project | Add Files命令。

  14.选中Project | Make命令编译连接项目。

  15.到调试器中调试程序。首先通过菜单Project | Enable Debugger来击活调试器。

  16.打开你的Palm,确认它固定在支架上。然后关掉PC的HotSync软件。

  17.在PC上,选中Project | Debug命令。

  18.在你的装置中,输入l连写的字母“1”,两个点号“..”,和一个数字“2”(1..2),来启动控制台程序(console)。

  19.在PC上,点击OK启动调试器。

  20.在调试器中点击前进箭头,执行应用程序。

  在Palm上运行应用程序,点中文本框,你就可以输入文字或数字了。如果你在大字状态时向右上一挑或者在符号中一点,你放在窗体上的手写输入转换指示器会分别露出箭头或点。

  需要结束应用程序时,请切记点击调试器窗口中的X来重启你的装置或停止控制台程序的运行。让控制台继续运行会引起Palm的一些问题。

  如果你的手写输入转换指示器在你刚才的程序中运行顺利的话,你就可以开始进一步了解它了。但如果它没能正常工作,那么你就有必要去判定程序中是否存在阻止文本框事件被操作系统处理的代码了。正确的做法是,可以把它们放在任何窗体中,那么当你手写输入时就可以看到它的用途了。它通常被摆在窗体右下角,因为人们习惯这样做。没有程序一定需要它,但把它放到窗体中它就能工作。

  从上面的例子中你可以看到许多与文本框相关的东西在工作。我们运行的窗体中的代码(hello.c)其实并没有对窗体做什么,然而我们却可以修改,输入,查找和替换文本,甚至做其它我们想做的事情。剪切和粘贴在这里不起作用。至于菜单和快捷键,我们将在以后的章节中接触到。

  注意:如果你的Palm在调试器运作后出现异常,可能是因为它没有被重启或控制台依然在运行。请把你的Palm放好,用推针或回形针的尾部去顶开P alm背面小洞中的重启按钮。Web: 进入讨论组讨论。
  • 应用MFC开发高级应用程序
  • WinZip校验ZIP压缩包应用程序
  • 在VC++应用程序中读取文本数据
  • 使用GWT开发AJAX应用程序
  • 在Ajax应用程序中实现数据交换
  • MFC应用程序框架入门
  • DirectSound应用程序开发快速入门
  • VB创建多线程应用程序(一)
  • VFP基础教程 第十一章 应用
  • 用Indy组件开发Socket应用程序

  属性

  你可以在资源构造器中改变很多有关文本框如何工作的内容。在构造器中调出Contact Detail窗口,选中项目中的.rsrc文件,然后在Contact Detail窗体中双击文本框,它的属性会显示在旁边。所有的Palm OS 用户界面控件都有一些公共的属性,像Left Origin和Top Origin。表3-1是所有的文本框属性和描述的列表。熟悉这些属性后,重新编译并调试程序,以试验每一个属性是如何影响文本框行为的。

  表3-1

名称 描述 Object Identifier 你选定的文本框名称。 Field ID 这个数值是Palm OS 用来定义特殊的用户界面对象的。 Left Origin 定义文本框左边界的位置,整个屏幕跨越160象素。 Top Origin 定义文本框上边界的位置,整个屏幕从顶到底共160象素。 Width 文本框宽度象素。 Heig进入讨论组讨论。

精华网络内容 :进入讨论组讨论。

  • 应用MFC开发高级应用程序
  • WinZip校验ZIP压缩包应用程序
  • 在VC++应用程序中读取文本数据
  • 使用GWT开发AJAX应用程序
  • 在Ajax应用程序中实现数据交换
  • MFC应用程序框架入门
  • DirectSound应用程序开发快速入门
  • VB创建多线程应用程序(一)
  • VFP基础教程 第十一章 应用
  • 用Indy组件开发Socket应用程序
支持各种不同版本的Palm OS

  事实上,上面的代码如果拿到Pilot 1000或者Pilot 1500这些使用Palm OS1.0版本的系统上运行的话就会使系统崩溃。这是因为在1.0版本中,SysKeyboardDialog()是一个于现在不同的函数调用。但也有好几种方法可以解决这个问题。首选就是换成调用函数S ysKeyboardDialogV10(),这是一个向后兼容的函数。除了最新的系统命令外,如果你还想了解更多的话,你就有必要检查一下OS的版本,这样可以基于O S版本来正确的调用函数。

  如果我们多次遭遇由于OS版本不同带来的严重后果的话,我们在编程时将变得更加老练。现在就用SysKeyboardDialogV10()替换这个SysKe yboardDialog()函数调用。

//CH.3 Bring up the keyboard tool
case EditKeyboard;
 SysKeyboardDialogV10();
 break;
  错误和警告

  Contacts程序已经扩展了它的使用范围,用户对它做的某些操作可能导致错误发生。现在是一个极好的时机来讨论出错处理。

  如果你执行编辑命令,就可以发现如果你做一些无意义的事,譬如在没有选中任何文本的时候复制,编辑函数也会产生一个警告声。不只是S elect All如此,因为你已经调用了一个普通函数,即便没有错误,它也会发出声音的。为了使Select All符合其它函数的发音标准,你可以加入如下的一个SndPlaySystemSound()函数:

//CH.3 Select All
case EditSelectAll
{
 //CH.3 Get the length of the String in the field
 Wordlength=FldGetTextLength(field);
 //CH.3 Sound an error if appropriate
 if(legth= =0)
 {
  SndPlaySystemSound(sndError);
  return(false);
 }
 //CH.3 Select the whole string
 FldSetSelection(field,0,length);
}
  当用户的输入超越了被调函数的职能时,就应该提示用户他们可能做错了什么。对此,有一个很好的解决方法,就是使用Alerts。Alerts `是由操作系统控制的袖珍型窗体,创建和使用都非常的方便。

  作一个试验:创建一个Alert资源,来显示Select All命令的错误信息:

  1.启动资源构造器。

  2.从资源类型列表中选中Alert。

  3.按Ctrl-K来创建一个新的警告。

  4.双击打开警告。

  5.改变消息属性像“There was no text to select。”

  6.改变Error的标题属性。

  7.改变Error的警告类型属性。

  为了调用这些Alert,我们加入FrmAlert()函数。你可以从Contacts_res.h文件中得到警告ID的变量名。

//CH.3 Pop up an error if appropriate
if(length= =0)
{
 SndPlaySystemSound(sndError);
 FrmAlert(SelectAllErrorAlert);
 return(false);
}
  加入上面的代码后,make,debug,并运行应用程序。可以发现,自从我们给错误设了警告类型,就有两次嘟嘟声:一个来自SndPlaySyst emSound(),一个来自警告。

  另一个我们要放置Alert,至少是一次系统嘟嘟声的地方,就是当我们检查焦点的时候。事实上,当休眠状态的应用程序被唤醒的时候,文本框是获得焦点的首选控件。在一般情况下我们就想要在此时发一个经典的系统嘟嘟声来通知用户。

  由于Select All的错误提示并不是经常会出现的,就让我们移走这个Alert资源。在以后的章节中,我们再使用Alert通知用户各种不同的错误信号吧。

  下一步是什么?

  在下一节中,我们将研究如何在你的应用程序中拥有多个窗体。URL查看 进入讨论组讨论。
  • 应用MFC开发高级应用程序
  • WinZip校验ZIP压缩包应用程序
  • 在VC++应用程序中读取文本数据
  • 使用GWT开发AJAX应用程序
  • 在Ajax应用程序中实现数据交换
  • MFC应用程序框架入门
  • DirectSound应用程序开发快速入门
  • VB创建多线程应用程序(一)
  • VFP基础教程 第十一章 应用
  • 用Indy组件开发Socket应用程序
程序清单

  这里是完整的Contacts.c程序清单。从hello.c改变的行都用//CH.3注解。

//CH.2 The super-include for the Palm OS
#include

//CH.3 Our resource file
#include “Contacts_res.h”

// CH.2 prototypes for our event handler functions
static Boolean myHandleEvent(EventPtr enent);
static Boolean menuEventHandler(EventPtr event);

//CH.3 Our field memory handle
static Handle 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com