www.dopod.cn-智能手机资源分享平台
诺基亚5220扩展功能设置攻略(手绘版)
8501
ppc数字智能手机i-mate 8501免费送 空中-Opera3.0手机浏览器免费下载
 30 123
发新话题
打印

[编程] 我的DA小程序~~:)

我的DA小程序~~:)

自己学palm编程有一段时间了,因为我以前也没写过什么程序,所一直不敢动手写。
自己倒是写了不少Hello Word这样的没什么用的程序,总觉得能写出来一个有点使用价值的程序是件很神秘的事 有点害怕,不敢动手。不过“palm是我的理想”是唯一一个能让我有点感动的操作系统,所以在放暑假之前我为自己订了一个目标:要在暑假里写出一个有点用的小程序。当时我看上的dumm 的 Ak_Utils我觉得这个程序很好(应该是容易写 ),后来又由eCool 的 Cool DA 这更让我下了写一个同类程序练练手的决心~~~经过我的观察,发现大家很喜欢这种程序:小巧、实用,可是大家对这两个程序又有点遗憾:都没有控制红外和蓝牙的功能,所以我决定在我写的程序里加上红外开关,对于蓝牙,由于我的机子是T650没法调试,所以我没敢把蓝牙开关加进去(要是那位好心人给我提供一个带蓝牙的机子,我一定把蓝牙开关加进去~~~~ )由于我是第一次写程序~~界面做得不好还请大家多多包涵~,由于DA的资料不好找,我就稍微的说说写这个DA的过程,在这里,我要感谢dumm PilotMian atsea eCool各位大哥的帮助~~真心的说声~~谢谢~~

zcj1122 编辑于 2003-7-25 1:26:07
palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
刚开始的时候,找了半天找到一个介绍DA的网站,全是英文,看了半天知道了DA程序的入口函数不是PilotMain,是在 code 1000的地方;DA不能有全局变量;可是在CW里怎么设置我还是不会~~多亏了atsea 和eCool 两位大哥耐心的给我说了设置方法如图:



zcj1122 编辑于 2003-7-25 0:55:04
palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
设置好这些后,用CW新建一个C项目,把它在xxx . c 文件中的代码除了#include语句外,全删掉,剩下就~~拿出咱得copy and paste神功~~把程序的框架搭起来(copy 我后面附的代码就行啦~~)框架和标准的c程序差不多,无非入口函数、事件循环、GetObjectPtr()这些,其实DA程序只要把编译的项目设置好后,和写一般的程序区别不大

palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
这是入口函数:一个struct:   typedef struct{Boolean beamONOFF;} BeamStatePrefereces;
void  da_main()
{
    FormPtr form;
    BeamStatePrefereces *beamP;
    ExgSocketType socket;
    UInt16 valueLen;

    beamP=MemPtrNew(sizeof(BeamStatePrefereces));
    MemSet(&socket,sizeof(ExgSocketType),0);
    form=FrmInitForm(HelloForm);
    FrmSetActiveForm(form);
    GetBeam(beamP,&socket);//取得红外的状态

   //这儿为什么不能调用DrawTime()??,调用了后from退出时field不会消失

    FrmDrawForm(form);       
    DrawTime();//读时间,并显示
    DrawRAM();//读内存的大小,并显示
    DrawBattery();//读电量,并显示
    GetCardState();//读扩展卡信息,并显示
     
    event_loop(beamP);//事件循环函数
   //设置红外的状态
   ExgControl(&socket,irSetScanningMode,&(beamP-beaONOFF),&valueLen);

     FrmEraseForm(form);
     FrmDeleteForm(form);
     MemPtrFree(beamP);
}
在这里请注意event_loop(beamP);因为DA程序不能有全局变量,所以要在主函数中建立一个struct变量,在需要这个变量的函数之间传递他的指针来修改这个变量。这里我有点不清楚,就是为什么不能在FrmDrawForm(form);之前调用DrawXXX()函数,我觉得既然field属于这个form,那么在后来的FrmEraseForm(form);应该把这个field给删除了呀,为什么不是这样呢??


palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
static void event_loop(BeamStatePrefereces *beamP)
{
    EventType event;
    Boolean done = false;
    UInt16 error;
    do {
        EvtGetEvent(&event, TimePeriod);
        if (SysHandleEvent(&event))
            continue;
        if (MenuHandleEvent(NULL, &event, &error))
            continue;
        done = handle_event(&event, beamP);//beamP被当作全区变量在需要的函数之间传递
        FrmHandleEvent(FrmGetActiveForm(),&event);
    } while (!done);
}
没什么好说的,只有一点EvtGetEvent(&event, TimePeriod); TimePeriod是我设置的超时值为一秒,让form每个一秒更新一次。


palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
static Boolean handle_event(EventType * eventP,BeamStatePrefereces *beamP)
{
    FormType *form;
    RectangleType  bounds;
    Boolean done=false;
    Boolean handle=false;

   switch(eventP->eType){
    case appStopEvent:
    EvtAddEventToQueue(eventP);
    done=true;
    handle=true;
    break;
   
    case nilEvent://每当超过一秒,就会有这个事件发生,在这里更新各种信息
               
   DrawTime();
   DrawBattery();
   handle=true;

   break;
//下面的是判断使用者是不是要退出程序
    case penDownEvent:
    form=FrmGetActiveForm();
    FrmGetFormBounds(form,&bounds);
    if(IsOutside(&bounds,eventP->screenX,eventP->screenY))
       done=true;  //如果done=true则退出程序
   handle=true;
    break;
  // 更新beam的信息
    case popSelectEvent:
    if(eventP->data.popSelect.listID==Beam_LS){
      if(eventP->data.popSelect.selection==1)
        beamP->beamONOFF=false;//选了OFF
      else
         beamP->beamONOFF=true;
        }
        break;
   
    }
   
    return done;
   
}


palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
剩下的DrawXXX()程序我就不贴在这儿了,因为无非就是分配内存、调用系统函数、获得信息、格式化成字符串、更新field信息,释放内存。我还有点不明白的地方:一开始我曾经想过用Preferecens代替全局变量,结果不起任何作用;也想过用FtrPtrNew(),可是一用就crash~~,请问这是~~为什么~~~为什么~~~~为什么~~~~为什么~~为什么~~~~!!
:cry:
另外小小的问一声:斑竹大人,可以加点原创分吗?
zcj1122 编辑于 2003-7-25 1:33:25
palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
完整的源程序:

tompda_44838_Hello.rar

palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
好厉害!谢谢你!提个小意见:扩展卡小数点后面的位数是不是太多了点?

:music:  平凡的去生活,实现自己理想 Zire72
哈哈~~
要是嫌我可以减几位呀~~不过我觉得这样仔细点

palm是我的理想~~|~~|~~ plmm是我的梦想~~~_^^_~~~~ 为了理想而奋斗,为了梦想而追寻~~~:_:~~
 30 123
发新话题