跳转到内容

Palm OS/C/字体编程

来自维基教科书,开放的书籍,开放的世界

定义和使用字体

[编辑 | 编辑源代码]

使用以下方法使您的应用程序可以使用字体

 FontPtr  font = MemHandleLock( DmGetResource('NFNT', TinyFont));
 FntDefineFont( 0x80, font);

..其中TinyFont是字体资源 ID,可使其可用。

要设置当前字体(由显式绘图函数遵守,但不会自动由所有控件使用,这些控件保存对它们应使用的字体的独立引用)

 FntSetFont( 0x80);


根据字体大小计算位置

[编辑 | 编辑源代码]
  • FntCharsWidth计算传递给它的文本的像素宽度
  • FntCharHeight提供字体的 高度,它是 *升高* 和 *下降* 的总和,不包括您可能希望在文本行之间留出的任何空格
  • FntAverageCharWidth尽管它的名字,但它提供了最宽字符的像素宽度。


工作示例

[编辑 | 编辑源代码]

此代码段依赖于 字体资源 。

#include <PalmOS.h>
#include "Fonts.h"


UInt32 PilotMain( UInt16 cmd, void *cmdPBP, UInt16 launchFlags)
{
  EventType  event;
  FontPtr    font;
  char       *msg;
  UInt16     msgLen;
  Coord      y;
  Coord      x;

  if ( sysAppLaunchCmdNormalLaunch == cmd)
  {
    font = MemHandleLock( DmGetResource('NFNT', TinyFont));
    FntDefineFont( 0x80, font);
    FntSetFont( 0x80);

    // locate the text in the middle of the screen
    msg    = "Hello, world!";
    msgLen = StrLen( msg);
    x      = (160 - FntCharsWidth(msg, msgLen)) / 2;
    y      = (160 - FntCharHeight()) / 2;
    WinDrawChars( msg, msgLen, x, y);

    do {
      EvtGetEvent( &event, evtWaitForever);

      SysHandleEvent( &event);

    } while (event.eType != appStopEvent);
  }

  return 0;
}

有关可能对 Palm 程序员有用的字体的详细信息,请参见 Palm OS/小型字体 。

华夏公益教科书