您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 嵌入式开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

Palm OS 3.5新特性
2001-07-24· ·中文··yesky


  ”本文是针对Palm OS 3.5的,基于开发者角度的一个总体看法。本文完成的时间比final documentationfinal SDK 3.5要早。因此,您可以等到这两个产品完成的时候,下载下来以便了解更多的信息。同时,在您真正开始对Palm OS 3.5平台的软件开发工作以前,您可以访问一下Palm OS 3.5 Top Issues页面。

  在1999年的PalmSource™Summit文献上,Palm公司推荐广大开发者们连接一下即将发布的Palm OS 3.5平台的新特性。本文是介绍的是这方面的一些概要性信息。不过,随着Palm OS 3.5操作系统和SDK 3.5的发布,您将获得更多的关于这方面的官方正式信息。

  关于该软件的ROM image文件,请访问Development Seeding专区的Pavilion页面。

  导言

  已经发布的Palm OS® software 3.5版本是作为一个平台型的版本来发布的。其含义是该OS软件是面向所有基于Palm OS操作系统的掌上设备的。形形色色的硬件制造商、OEM制造商、协议许可制造商将可以自己决定向他们的用户发布这些新产品的时间和方式。如,许多制造商在他们的设备允许的情况下,可以向用户提供刷新闪存的新产品发布方式。

  改进总览

  新的3.5版本包含的新改进包括面向用户的功能,对于授权开发商的新特性,这对开发者的API接口技术和功能。在内嵌软件和系统用户界面方面也有改进,但是除了对Launcher软件外,没有对其他内嵌软件的数据格式方面进行改进。开发者们往往希望在不久的将来,能够有内嵌软件数据格式方面的改进,所以,目前除了在编程时多加小心以外,请同时注意未来的新发布的信息。

  但是,这次在台式机方面的软件改进和web clipping软件方面的改进是比较次要的。例如,这次用Visual C++ 6.0对HotSync® Manager热同步管理器进行了重新设计,这样开发人员就不必用老的编译器来编译conduit了。也许这些改进对于掌上设备的用户来说微不足道,但是对于开发者来说却是意义非凡。

  发布的本OS版本还有一个意义重大的地方,那就是其中包含了以往的3.1、3.2、3.3版本的Palm OS的全部功能性,而不是它们当中某一个版本的扩展集而已。3.5版本的系统的基本代码中包含了以前的所有版本的功能。新版本的SDK也具有同样的包含性。在此之前,开发人员往往需要解决如何建立临时的包含文件层次,以便于支持不同版本的系统。但是请注意,这并不是意味着每一个运行着Palm OS 3.5版系统的掌上设备就能够拥有3.5版本系统支持的全部软硬件功能。因为每一个具体的掌上设备生产商都会根据它们对客户需求的理解,来自主地决定它们生产的掌上设备应该具有哪些功能。

  新版本的OS同样提供了一个新的机会,那就是有机会为系统提升或者增加新的通用的,不是针对某个具体机型的功能模块。但是具体的情况取决于所有的基于Palm OS系统平台的掌上设备产品、授权生产商以及开发者的具体情况。

  软件和系统界面的改变

  新版本的系统在许多内置软件和系统界面方面有很多的改变和提高。其中一些比较重要的如下:
  • 支持1,2,4,8位彩色/灰度模式的显示系统。

  • 日程表里增加了关于每日约会、任务安排的视图。

  • 闹钟功能现在提供了一个更大的按钮以便于操作,同时还增加了一个Snooze按钮。

  • 当传送全部的一类数据时,接受方的对话框允许对这整个一类进行选择,以便于放置。

  • 在地址簿中输入标题、公司、城市、州、国家时,系统可以根据输入的文本进行联想输入。

  • 被掩盖的纪录

  • 命令条

  • 通过点击软件的标题栏来打开菜单条

  • 双击选择一个词,三击选择一句话。

  • category指示器能够区分是数据发生变化,还是数据的视图发生变化。实际的例子可以在备忘录的编辑窗口看到。

  •  还有一些对用户来说察觉不到,但是有助于开发者的改动:

  • Extended Gadgets,如,它能够在用户进行写画,擦除的时候返回一个函数,以便于处理手写笔的输入。

  • Color picker取色器,允许用户在一个实际的图像上取得某个色彩的RGB的值。

  • Slider controls

  • Graphic buttons图形按钮

  • Notification Manager通告管理器能够像应用程序通告一些有用的信息,如关闭电源。

  • Menu Manager菜单管理器能够允许用户在菜单中增、删、改菜单内容。

  • dynamic heap动态堆栈能够通过系统可用的存储器空间来决定自己的大小,而且一般情况下比以前要多。

  • SDK在包含文件中,进一步对类型的定义和参数的定义进行了阐述,使其更为一致。

  • Debug ROM中的错误检验功能得到了提高,新版本中的调试用代码和对ErrFatalDisplay()函数的调用次数更少。

  • 增加了更多的API,用于系统改进,调试等。

  •   图形系统

      在3.5版本的系统中,最主要且最显著的变化就是在图形系统方面。它现在已经能够支持1,2,4,8位的彩色/灰度显示模式。虽然并不是所有的运行3.5版本系统的硬件设备都能够支持上述的显示模式,但是至少像4位灰度(16阶)还是能在一些使用DragonBall EZ处理器的机型——如Palm V系列上正常显示。

      为了支持更好的彩色和灰度显示,新版本系统增加了不少新的API函数。包括那些被开发者长期呼吁,用于解决老API的局限性的新函数,如WinGetPixel和WinSetPixel,现在都被开发出来了。

      而且,目前发布的3.5版SDK的初级版本,包含了一些支持新显示系统的新文件。另一方面,3.0版本的POSE模拟器能够模拟彩色显示屏。所以,开发者可以在3.5版本的彩色ROM文件的帮助下,马上开始开发彩色界面的应用软件,而不用等到硬件制造商的彩色显示硬件设备的正式完成。

      被遮盖的记录

      记录是一个可以被保密的软件。如果用户选择了这种方式,并且系统允许的话,记录就会被通过加密软件来进行显示和隐藏。而在3.5版本的系统中,用户有了第三种选择:记录可以出现,但是其中的数据被一个灰块遮盖。

      系统通过prefShowPrivateRecords函数来返回一个enum,用于告诉软件,是显示、隐藏,还是用灰块遮住数据。这也是通过一个新的API接口实现的,以便于用户非常方便地在这三种模式间进行切换,然后软件会对其显示效果进行相应的改变。这里用道德两个函数是SecSelectViewStatus()和SecVerifyPW()。

      在表格中,也可以用这种方式来掩盖一行,或者一列数据,调用的函数是TblSetRowMasked(), TblSetColumnMasked,和TblRowMasked()。当某一行被设置为遮盖时,表格中除了会出现相应的灰块以外,还会出现一个小锁的提示图标。如果您的软件用到了TtblSelectEvent事件,您将需要使用下面的代码来允许用户方便地切换模式。

    if (TblRowMasked(tblPtr, theRow)) {
       SecVerifyPW(showPrivateRecords);
       RedrawEverything();
    }

      命令条

      以往的版本是用一个比较粗糙的命令敲击(从左下方到右上方)来表示一个“Command:”,并且显示在屏幕的底部。而新版本则提供了一个横贯整个屏幕下方的命令条,使得其它的应用软件也可以在上面放置自己的图标。

      当您的应用软件取得一个menuCmdBarOpenEvent事件时,就会调用一个MenuCmdBarAddButton()函数,用于定义一个5x13像素的位图。如果该命令不是一个菜单命令的话,则系统就会为其显示相应的文本信息。如果该命令是一个标准的菜单命令的话,当用户点击哪个命令条上的图标时,命令条就会向相应的应用软件发送一个标准的菜单事件。因此,开发人员只需要对menuCmdBarOpenEvent部分的代码做一下修改,就可以使用这个新的功能。

      而且,命令条上的按钮地显示效果可以根据用户的操作发生改变。如,当用户选择了一段文本时,则“复制”或者“剪切”按钮就会出现。此外,按钮的数量被限制在4个以内,以便于给feedback文本留出足够的空间。

      当命令条处于工作状态时,如果有一个工作去被激活,则该工作区的package上会自动出现相应的“撤销”,“剪切”,“复制”或者“粘贴”按钮。如果您不想让系统其中这项默认的操作的话,您可以在event->data.menuCmdBarOpen.preventFieldButtons选项的布尔参数值设为true。

      不过,在新版本的系统中,软件开发人员将更多的在程序中调用MenuEraseStatus(),因为新的命令条比以前的“Command:”文本形式占用了更多的屏幕空间。当打开或者关闭一个软件时,系统会自动隐藏命令条,但是您的软件可能需要在那个区域进行写画时,隐藏命令条;或者其他的一些事件会要求使用命令条。(注意:PalmSource中的ROM文件并不能像即将发布的3.5版本的文件那样隐藏命令条。)

      Extended 扩展


      在过去,对于您开发的应用软件来说,Gadgets窗体对象仅仅是一个和附件,或者内存不多的东西。并且系统也不会支持更多的Gadgets扩展。但是,在3.5版本中由PalmRez或者FrmNewGadget()创建的Gadgets将是一个“扩展型的Gadgets”。它能够支持一个回传函数指针。这个指针是由新的FrmSetGadgetHandler()程序设定的。系统通过调用这个回传函数,就能够使其像手写笔的点击那样自己处理写画以及擦除事件。

      当您的回传函数取得一个formGadgetDrawCmd事件,并且您用写画的方式做了响应时,您必须设置gadgetP->attr.visible可见,以使得系统能够知道在合适的时候给你发送一个ormGadgetEraseCommand事件。如果您没有进行gadgetP->attr.visible的设置的话,并且没有处理formGadgetEraseCommand事件,系统将擦除gadget范围内的矩形区域。其它的命令发送包括frmGadgetEnterEvent(当用户点击该物体时发送),frmGadgetMiscEvent(想您向gadget发送软件定以信息时发送),以及formGadgetDeleteCmd(当窗体消失时发送——但是PalmSource Seed版没有这个命令)。

      取色器


      新的UIPickColor()程序允许您能够在两种用户界面模式下直接获得颜色:RGB和chits模式。您可以设置您的软件对以上任何一种,或者两者都起作用。

      如果您要求您的软件同时返回RGB和index索引色的值的话,两者都能成功实现,只不过当您时用RGB 取色器时,RGB模式的数据可能更加准确但是色彩不会在正确的调色板中出现。如果您想使您的软件正好正确地响应用户的色彩选择的话,您必须使用相应的API函数来改变屏幕的彩色调色板。

      Slider Controls游标控件


      以前在Palm V系列设备中的调整对比窗口中看到的游标控件,在新版本中已经成为一个能够被其它软件到用的标准控件。Constructor已经增加了对游标控件的支持。同时它也能通过调用CtlNewSliderControl()函数来创建。

      这里有两种形式的游标控件:sliderCtl和feedbackSliderCtl。当用户在使用该游标控件时,它们会持续模仿一个文本按钮的动作,不停地向系统发送事件。而一个feedbackSliderControl控件就是通过项应用软件发送ctlRepeatEvents事件的方式来通知软件进行适当的显示刷新。

      CtlGetSliderValues()和CtlSetSliderValues()两个函数可以用来获得和改变游标的信息。

      Graphical Buttons图形按钮


      图形按钮和普通的文字按钮非常相似,只不过在外观上使用了一个位图来代替原来的文字。一般要位一个按钮准备两个图片,一个用于常规显示,另一个用于在用户用手写笔按下这个按钮时,呈现出一种被选中的效果。

      在以前的一些老版本的软件中,开发者往往是用这样一种方式来表现上述那种“被选中”的效果:用一个没有文字,没有边框的按钮来覆盖原来窗体上地位图,使得看上去好像被选中了。但是这种方式在支持更多灰度显示模式和彩色显示模式的机型上就不能用了。因为在上述两种情况下,很难通过简单的编程方式将每一个像素、色彩都能很好的被掩盖。结果看上去的效果就很不好。

      升级后的constructor能够创建图形按钮,或者能够通过编程的方式,控制CtlNewGraphicControl()和 CtlSetGraphics()函数,从而在程序运行的过程中,动态的改变按钮上的位图效果。

      Notification Manager通告管理器


      对于一个应用软件来说,在它安装以及在系统中注册的时候,系统就会要求它登记那些对该软件有影响的系统事件。然后,在程序运行中,系统会通过公告管理器向那些应用软件通告相关事件的发生。这是一个非常有效,扩展性非常强的功能。它使得系统能够恰当的调用所有设备上安装过的程序,同时也能够向那些非应用软件的函数,如hacks,库函数等,发送有用的系统事件信息。

      应用软件可以通过调用一个SysNotifyRegister()函数向系统声明那些系统事件使该软件关注,并且需要系统进行通报的。然后在该软件被关闭或者不再需要关注系统事件时,可以通过调用SysNotifyUnregister()函数来告诉系统不再发出通告。而应用软件和系统是通过调用SysNotifyBroadcast()和SysNotifyBroadcastDeferred()函数来在适当的时候发出通告的。

      一般会被系统通告的事件如下:

  • 系统时间变化

  • 天线展开

  • 系统显示模式变化(色调或者色深变化)

  • 热同步过程的起止

  • 系统重启完成

  • 密码遗忘

  • 休眠(多种通告):系统休眠过程是由四个步骤组成:发出请求,通报,EarlyWakeup和LateWakeup。休眠信息将不能被确保能够被通告。如果您的软件需要知道系统被启动的时间,就应该向LateWakeup注册。而EarlyWakeup则很少被注册,因为在用户的观点来看,这种情况下的通告发出时,系统往往并没有真正启动。

  •   菜单

      新的菜单管理器能够支持应用软件在系统运行中,动态地改变菜单的内容。相应的新的函数是MenuHideItem(), MenuShowItem() 和MenuAddItem。但是它们并不能像台式机那样,用“变灰”的方式来表示那些目前无效的菜单内容,因为Palm OS系统用户界面的局限性目前还限制着这种效果的实现。

      当您的软件启动时,系统会访问您软件的资源文件,然后根据里面的内容,调用menuOpenEvent事件来为您的软件创建菜单。这同时也是一个信号,告诉您的软件可以马上编辑和改变任何一个菜单,因为这个事件一被调用就意味着马上要进行菜单的显示或者使用。

      在某些日本语的掌上设备上,系统能够向标准的Edit菜单添加内容。除此以外,其他所有的菜单的使用都可以被您的软件完全控制。

      Misc. 新的API接口函数

      ResLoadConstant()是一个新增的非常有用的函数。它能够找到一个resource,锁定它,从当中复制32位的数据出来,将其解锁,然后将那32位数据回传给某个软件。这种方式能够被用来进行定位,减少软件中的数据编码量,从而减少程序体积。

      TblGetItemPtr()——以前的TblSetItemPtr()从来就不具备“get”方式通讯的能力,现在它拥有了。

      FrmNewGsi()——通过它可以在程序运行时,动态地创建绝大部分的用户界面对象。但是Graffiti-shift状态指示器目前还不能实时创建。

      EvtSetAutoOffTimer()——很多软件需要对系统的自动关机功能——系统超过一段时间没有活动就自动关机的功能,又精确的控制。而这个函数能够帮助开发者通过很多方式对系统自动关机的时间进行控制。

      DateTemplateToAscii()——能够允许用户在模板的基础上进行数据格式化,因此用户可以确实获得自己想要的数据格式。

      FrmCustomResponseAlert()——和以前的FrmCustomAlert()类似,不过包含了一个输入区以及一个回传程序指针,以便于用户通过编程的方式使输入有效。

      The Dynamic Heap动态堆栈

      现在,动态堆栈的大小是通过系统可用的存储空间的大小确定的。具体的对应关系如下:

    系统RAM大小 动态堆栈大小
    小于2兆 64K
    2兆和4兆之间 128K
    4兆以上 256K

      Misc. API的变化

      FtrPtrNew()能够支持64K以上的数据区块分配。这项改进使针对动态数据堆栈的,所以用户需要通过DmWrite来修改它们。不过只读访问还是可以通过传统的C语言指针来进行。不过下面的由大的数据区分配带来的问题也必须注意:它造成了数据区块之间隔离区的缩小,可能会在系统的运行中造成冲突。

      FrmHideObject() 和 FrmShowObject()对象现在也可以在对象列表中出现了。

      "Edit Category"的条目已经能够被隐藏了;以前虽然能改变它的文字内容,但是不能被隐藏。

      StrToLower() 现在已经不仅仅支持字母A 到 Z,同样能够支持其他的语言。

      ScrDisplayMode() 被更名为 WinScreenMode()。

      SelectTime() 现在已经增加了一个“全天”选项按钮,一个新的参数能够控制那些小时代表“全天”。以前的SelectTime() 程序被更名为SelectTimeV33(),但是功能依旧。

      SDK包含文件

      许多SDK包含文件的内容都作了改变,有的被改名字了,如Pilot.h 被更名为 PalmOS.h。

      现在对于公共函数或结构以及局部函数或结构的定义更加完善,使得用户可以更安全地使用这两种不同的属性。

      绝大部分的局部函数的信息被移出了公共包含文件。这些函数同时也可以被开发者通过ROM Source Code license使用,但是因为它们的执行的细节发生了变化,它们就不再属于SDK的范围了。

      数据类型发生了改变,使得整个类型体系趋于严密合理。如,原来的整数int变成了int16,单词变成了UInt16。这样就可以区分数据是否带有符号,以及数据的大小。以前对于每一个Foo结构体的FooPtr类型数据的声明已经被舍弃,取而代之的是简单的"Foo *"和"FooType *"方式。

      当您要在新的SDK上使用原来的软件的源文件时,您就必须经过一个“查找并替换”的操作了。但是这种改变并不会影响到编译生成的二进制程序。目前,Palm公司正在为新版本的SDK编写一本全面的指南,以让用户在使用新的SDK时,尽可能减少麻烦,获得最大的帮助。

      Debug ROMs 调试功能的ROM文件

      新的Debug ROMs包含了更多的验证参数的代码。例如,您可以在拖拉窗口时体会到选择得更加合理。新的ROM文件减少了错误检查的工作量,因为这些过程应该更多地由使用ROM的开发者完成。

      更多的不正确的ErrFatalDisplay调用被返回一个错误代码的函数调用代替。

      FormDrawForm 和 FormEraseForm 趋于如发现更多的不恰当的drawing时间,或者frmUpdateEvents事件的不成功处理。

      其它的改进还有,彩色的debug roms使用了独特的用户界面颜色,在进行软件切换时,UICaution(通常是黄色)被用来清除屏幕背景。如果出现新的文本空间时,FrmCopyLabel()将会出现。DmReleaseResource()将使得那些传过来的句柄有效。寄存器和堆栈将被设置成0xFE或者其他的值,以便于发现没有被初始化的存储单元等等。
    【责任编辑:方舟】
    【发表评论】【关闭窗口】
    ■ 相关内容
     在palm中创建界面图标
     PC也能玩Palm
     在嵌入式开发中创建界面图标
     Palm OS软件界面设计初步
     Palm OS 3.0 新特性
     Palm OS 3.5重要系统错误
     选择Windows CE 还是 Palm OS
     Palm OS开发者必读
    感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!