Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/9-2
9-2 サイズの制約
ペン入力マネージャが利用可能であることを確認したら、アプリケーションの各フォームのサイズ制約をペン入力マネージャに知らせる必要があります。そのためには、フォームがロードされた際に ―― つまり frmLoadEvent に応答して ―― WinSetConstraintsSize 関数をコールします(frmOpenEvent に対する応答でも可能です)。
WinSetConstraintsSize 関数は7つのパラメータをとります。フォームウィンドウのハンドル、フォームの最小・最大・優先の高さ、および最小・最大・優先の幅です。ペン入力マネージャはフォームが入力エリアを閉じた状態をサポートするかどうかを決めるためにこの情報を使用します。
サイズ制約を指定しないと、ペン入力マネージャはフォームの最小・最大・優先のサイズが全て標準座標系で 160 であると仮定します。これにより、レガシーなアプリケーションは常に入力エリアが表示された状態で適切なサイズに設定されます。
リスト 9.2 に、3つのフォーム ―― メインフォーム、編集フォーム、およびパスワードダイアログ ―― をもつアプリケーションでどのように WinSetConstraintsSize をコールするかを示します。WinSetConstraintsSize は frmLoadEvent または frmOpenEvent に対する応答でコールされなければなりません。通常、frmLoadEvent はアプリケーションの AppHandleEvent で処理されますから、以下のコードはアプリケーションの AppHandleEvent 関数内に書くことになるでしょう。
リスト 9.2 サイズ制約の設定
if (eventP->eType == frmLoadEvent) { // Load the form resource. formId = eventP->data.frmLoad.formID; frmP = FrmInitForm(formId); FrmSetActiveForm(frmP); // Set the same policy for each form in application. err = FrmSetDIAPolicyAttr(frmP, frmDIAPolicyCustom); // Enable the input trigger err = PINSetInputTriggerState(pinInputTriggerEnabled); formWinH = FrmGetWindowHandle (frmP); // Set the event handler for the form, and set each form’s // size requirements. switch (formId) { case MainForm: FrmSetEventHandler(frmP, MainFormHandleEvent); WinSetConstraintsSize(formWinH, 80, 160, 225, 160, 160, 160); break; case EditForm: FrmSetEventHandle(frmP, EditFormHandleEvent); WinSetConstraintsSize(formWinH, 100, 160, 225, 160, 160, 160); break; case PasswordDialog: FrmSetEventHandler(frmP, PasswordDialogHandleEvent); FrmSetDIAPolicyAttr(frmPolicyStayOpen); break; default: break; } return true; }
リスト 9.2 では、WinSetConstraintsSize はアプリケーションの各フォームに対して1回ずつコールされています。現状ではフォームの幅をリサイズすることはないため、それぞれの呼び出しにおいて幅に関するパラメータは全て 160 になっています。フルスクリーンのフォームでは優先の高さが 160 ピクセルになってしますが、これは入力エリアが静的なデバイスではその大きさのフォームになるからです。ただし、入力エリアがより広いスペースを必要とする場合、メインフォームでは 80 ピクセルまで、編集フォームでは 100 ピクセルまで小さくできます。最後に、パスワードダイアログではパスワード入力が必要なため、入力エリアをクローズできるようにするべきではありません。