〜 Palm ソフトを作ってみよう その2 〜

今回は、 Palm 最大の特徴である、画面のタッピングを使ったアプリケーションを作成してみたいと思います。
きわめて基本的な処理のみを用いて作成してみます。
 
作ろうとするソフトは、スタイラスを鉛筆のように用いて、画面に描画するというものです。
完成したソフトを使うと右図のような結果を得られます。
 
実際のソースを見る前にソフトウエアの動作を大まかに説明します。
Palm のソフトウエアでは、スタイラスによる画面操作に関して、
 1. ペンが画面に触れたとき
 2. 画面上でペンが動かされたとき
 3. ペンが画面から離れたとき
の3つのイベントが発生します。それぞれのイベントに対して、penDownEvent、penMoveEvent、penUpEvent というメッセージが送られます。
メッセージは、 MainFormHandleEvent(EventPtr eventP) 関数に渡され、 その引数 eventP 構造体の eType に格納されます。
また、このときのペン位置は、eventP 構造体の screenX、screenY で渡されます。
 
 
このペン状態とペン位置から、連続的に線を描画する訳ですが、今回のアプリでは Palm の API である、ドットを書く WinPaintPixel(x, y) と、2点間に直線を引く WinPaintLine(x0, y0, x1, y1) 、描画色を設定する WinSetForeColor(color) を用います。
2点間の直線を引く場合は、直前のペン位置を覚えておく必要もあるので、グローバル変数として xx、yy を指定します。
また、描画色も毎回設定し直す手間を省くために、グローバル変数の PenColor を設定します。
 
xx、yy、PenColor の初期化は、 frmOpenEvent イベントでアプリが起動されたところで行っています。
xx は初期値をマイナスにし、最初のペン位置が設定されるまで (penDownEvent が来るまで) 他のイベントでの描画処理を禁止する役割も兼ねています。
また、PanColor は、 WinRGBToIndex(RGB) により rgb で指定した値を設定しています。
 
ソフトウエアは、先回作成した test プロジェクトを修正します。
...\test\Src\Starter.c を修正するわけですが、修正をする前に Starter.c を Starter.ori とでもリネームしてとっておいて下さい。
 
まず、Starter.c をエディタで開きます。
はじめに、グローバル変数を設定します。
Global variables コメントのところで2行 xx、yy、PenColor を追加します。
 
 
次に PalmOS からのイベント処理を行います。
MainFormHandleEvent(EventPtr eventP) 関数で、2つのローカル変数、ペン位置を示す x、y と描画色初期化時に使用する rgb を定義します。
frmOpenEvent イベントで xx、yy、PenColor を初期化します。
penDownEvent イベント判断を追加し、そのペン位置にドットを描画すると共に、xx、yy にペン位置を代入します。
penMoveEvent イベント判断を追加し、xx、yy から今のペン位置まで直線を描画します。
penUpEvent イベント判断を追加し、xx、yy から今のペン位置まで直線を描画し、xx、yy をマイナスにします。
 
 
これで先回同様、コンパイルをした後、シミュレータでデバッグを実行できます。
以外と簡単に作成できたのではないでしょうか。
 
※ なお、お使いの CodeWarrior 英語版では、コメント内の日本語が文字化けします。