Treo 6005-Way Navigation に関して。

5-Way Rocker 有無の判断

「Treo600_Developer_Reference_Guide」より

UInt32 val;

if (FtrGet (hsFtrCreator, hsFtrIDNavigationSupported, &val) == errNone)
{
 // 5-Way Rocker あり
}


※下の方法は使えない(エラーとなる)。

if (FtrGet (sysFileCSystem, sysFtrNumUIHardwareFlags, &val) == errNone)
{
 if (val & sysFtrNumUIHardwareHas5Way)
  // 5-Way Rocker あり
}

‘fnav’リソースの定義

  • 5-Way Navigationを有効にするには、formNavRscType (‘fnav’)というリソースをフォーム毎に追加する必要がある。
  • ただし、モーダルフォームには追加しなくても良さそう。
  • サンプルコード「HsNavSample」が参考になる。

書式

  • ヘッダー
UInt16 version;                  // APIのバージョン (=1)
UInt16 numberOfObjects;          // オブジェクトの数
UInt16 headerElementSizeInBytes; // ヘッダーサイズ (=20)
UInt16 listElementSizeInBytes;   // リストの要素サイズ (=8)
UInt32 navFlags;                 // フォーカスモード...FrmNavHeaderFlagsAutoGeneratedなど
UInt16 initialObjectIDHint;      // 最初にフォーカスされるオブジェクトのID
UInt16 jumpToObjectIDHint;       // 未使用
UInt16 bottomLeftObjectIDHint;   // 未使用
UInt16 padding;                  // ?
  • 以下はオブジェクトの数(numberOfObjects)だけ繰り返し
  • 順番は左上から右下へ向かって横に移動(が良いと思う)。
UInt16 objectID;                 // オブジェクトのID
UInt16 objectFlags;              // フラッグ...none(0)で特に問題なし
UInt16 aboveObjectID;            // 1つ上のオブジェクトID(前のではない)
UInt16 belowObjectID;            // 1つ下のオブジェクトID(後のではない)

CodeWarriorでの定義

HEX "fnav" ID ListView
0x00 0x01
0x00 0x0b
0x00 0x14
0x00 0x08
0x80 0x00 0x00 0x00
0x03 0xf2
0x03 0xf2
0x03 0xea
0x00 0x00

0x03 0xfc
0x00 0x00
0x00 0x00
0x03 0xf2

...以下オブジェクトの数だけ繰り返し(この場合11個)
  • このファイルをプロジェクトに加えて、他のものと一緒にコンパイルする。

プログラム内の処理