http://blog.sina.com.cn/agilemind[订阅]
个人资料
访客
读取中...
好友
读取中...
评论
读取中...
分类
    内容读取中…
博文
置顶:My First Blog(2008-06-16 20:07)

 

This is my First Blog.

I thought it might be a good way to record my agile minds.

Let time prvoe it!

Palm 程序的发布问题(2008-12-12 20:30)

    最终发布Palm程序,你需要考虑,是完全免费的,还是有一定限制需要付费的。如果是后者,那不可避免地需要考虑两个问题:

1.12位序列号

这是每个Palm 设备独一无二的ID号,你可以通过这个ID号来判断注册码是否正确。序列号的获取如下:

 

char * buffer;

UInt16 length;

Err error;

error = SysGetROMToken (0, sysROMTokenSnum, (BytePtr

Palm 程序的退出(2008-12-12 20:24)

    一般情况下,不需要显示地退出某个Palm程序,因为在同一时间,Palm OS只能运行一个程序,在打开一个新程序的同时,正在运行的程序就自动退出了。

    如果我们非要退出正在运行的程序,譬如说输入了错误的注册码,要求退出,则可以添加以下代码在需要退出的位置:

 

EventType newEvent;

newEvent.eType = keyDownEvent;

newEvent.data.keyDown.chr = vchrLaunch;

newEvent.data.keyDown.modifiers = commandKeyMask;

 

1.在计算机上已经安装了桌面端同步软件,并且在任务栏右下角的系统托盘中选择了NetWork;

2.在模拟器中点击右键,Settings->Properties,选中Redirect NetLib Calls to host TCP/IP;

3.回到模拟器,进入HotSync程序

 显示/隐藏控件是很常用的函数。在Palm OS有限的屏幕资源中,需要有条件地显示、隐藏控件,这样可以在不切换窗口的前提下,尽可能地丰富这个窗口的交互性。

 

void HideFormObject (const UInt16 objID)
{
     FormType *frmP = NULL;
     UInt16 objIndex = 0;
     frmP = FrmGetActiveForm ();
     objIndex = FrmGetObjectIndex (frmP, objID);
     FrmHideObject (frmP, objIndex);
}

void ShowFormObject (const UInt16 objID)
{
     FormType *frmP = NULL;
     UInt16 objIndex = 0;
     frmP = FrmGetActiveForm ();
     objIndex = FrmGetObjectIndex (frmP, objID);

牙齿磕坏了怎么办?(2008-10-12 20:24)

我在牙科门诊,经常可以看到外伤造成牙折、牙脱位的患者。那么,作为一个普通的老百姓,不小心把牙磕着了,怎么办呢?

 

首先,判断牙伤得怎么样:

1.表现:没有碎、断,牙龈有少许渗血,仅仅是疼痛不适

  考虑:那么可能是牙震荡或者已经发生牙隐裂

  建议:你需要到牙科诊所进一步检查一下

  预后:最好的结果就是没有任何影响,最差的结果牙髓坏死坏死。

 

2.表现:某个牙尖或者切缘断了

  考虑:冠折

  建议:到牙科诊所,如果损伤轻,那么可能简单的调(牙合)就可以;如果影响到牙髓,就需要做牙髓治疗,譬如间接盖髓术、直

光打开不行,程序退出的时候,还要记得关闭啊。

因而,需要在事件中加入这么一条:

 

case frmCloseEvent:

{
   if (g_prefs.abbreviationDBRef)
   {
       Err error = DmCloseDatabase (g_prefs.abbreviationDBRef);
   }
   break;
}

 

在操作数据库时,有很多API函数,十分繁杂。我编写了一个简单的函数,给定数据库名称,可以打开这个数据库,如果没有则创建一个。

定义如下:

头文件中写入:

Err OpenDatabase (const Char * databaseName, const UInt16 mode, DmOpenRef & databaseRef, LocalID & databaseID);

cpp文件中写入:

 Err OpenDatabase (const Char * databaseName, const UInt16 mode, DmOpenRef & databaseRef, LocalID & databaseID)
{
   Err error = errNone;
   //是否有数据库
   databaseID = DmFindD

    今天,我们看看随机数问题。在编程的时候,最常用到的就是随机数的产生。玩纸牌游戏也不例外,我们需要随机产生纸牌。

    Palm OS为我们提供了一个现成的随机数生成程序

Int16 SysRandom (Int32 newSeed)

    其中newSeed表示随机种子,也就是说如果种子一样,那么产生的随机数也会一样,保证我们能够重复这种随机性。

    产生0~51的随机数,我们只需要用取模的方法。

    UInt16 CardIndex = SysRandom (seed) % 52;

    而种

接下来,我们尝试一下绘制高分辨率的图像。我们定义这么一个函数,它将方便我们以后绘图。

在头文件中写入

void HRDrawBitmap(const DmResID resID, const Coord x, const Coord y);
在cpp文件中写入

void HRDrawBitmap(const DmResID resID, const Coord x, const Coord y)
{
   MemHandle resH;
   BitmapType *bitmap;
   resH = DmGetResource (bitmapRsc, resID);
   bitmap = static_cast<BitmapType*>(MemHandleLock (resH));
   HRWinDrawBitmap(sonyHiResRefNum, bitmap, x, y);
   MemHandleUnlock (resH);
}

 

    既然有了高分的显示,那么就可以瞧瞧怎么利用这块屏幕了。我们开始编写一个空当接龙纸牌游戏。

    第一步当然是准备好各项资源,既然是纸牌游戏,少不了纸牌。我绘制了52张小号纸牌36x54。这样,在320x320分辨率的屏幕中,刚好可以放下8列,中间还有少许空隙,以供分辨。看下图示例: