戻る


SUBJ:【不定期連載】LHAPI入門 5  この連載は、HP100/200LX(以下100LXと表記)の内蔵インターフェース ルーチンであるLHAPI(Lotus Handheld Application Programming Interface)の入門です。  今回はLHAPIの動作の基本であるメッセージについて解説します。 ============ ここから ============= 6 メッセージ  LHAPIはメッセージ駆動で動作します。イベントやキー入力もメッセー ジの一種として取り扱われます。  メッセージは各ウィンドウ間の連絡に用いられます。総てのメッセージ が総てのウィンドウで意味を持つわけではありませんが、使われないメッ セージでも親クラスに渡され意味を為すことがあります。  メッセージを送信する最も一般的な関数はSendMsg関数です。 int SendMsg(PLHWINDOW Window,UINT Message,UINT Data,UINT Extra)  メッセージはDataとExtraというオプションを持ち、同じメッセージでも 意味が変わる場合に用いられます。例えば、KEYSTROKEメッセージの際の キーコードであり、COMMANDメッセージの際のコマンド番号です。  メッセージには以下の種類があります。  KEYSTROKE : フォーカスされたウィンドウにキー入力を送ります  DRAW : ウィンドウに再描画を指示します Dataには描画する領域を指定します  CREATE : ウィンドウの作成を指示します  DESTROY : ウィンドウの削除を指示します  TERMINATE : 全ウィンドウにアプリケーションの終了を送ります  ACTIVATE : 全ウィンドウにタスクスイッチから復帰したことを連絡 します  SETFOCUS : 特定のウィンドウをフォーカスします  LOSEFOCUS : 特定のウィンドウのフォーカスを失わさせます 他のウィンドウがフォーカスを得た際にはシステムが自動 的に行います  NULL : E_NONEイベントかNULLメッセージを送ります  NOTIFY : 子や親ウィンドウに通知します  COMMAND : コマンドを送信します  APPEAR : ウィンドウに対し可視化を指示します  DISAPPEAR : ウィンドウに対し不可視化を指示します  いくつかのメッセージはサブメッセージを持ち、これにより多様な意味 を持たせることができます。サブメッセージはDataに入れて渡されます。  以下に各メッセージのサブメッセージを列挙します。  ・CREATEのサブメッセージ CREATE_NORMAL : ウィンドウを普通に作成します。 CREATE_FOCUS : ウィンドウの作成後に、自動的にSETFOCUSメッ セージを送ります。ExtraがSETFOCUS_NOLOSEでない場合は、その    時点でのフォーカスウィンドウは新しいウィンドウがAPPEARメッ    セージを送られる前にLOSEFOCUSメッセージを送られます。これは    新しいウィンドウの一部を古いウィンドウの描画により隠すこと    を防ぐためです。ExtraパラメーターはSETFOCUSのサブメッセージ    と同じものを使用できます。  ・DESTROYのサブメッセージ DESTROY_NORMAL : 普通にウィンドウを削除し、STYLE_SAVEUNDERが    指定されていない場合は画面上に表示されたウィンドウ総てを    再描画します。 DESTROY_NODRAW : 他のウィンドウの再描画をせずにウィンドウの    削除を行います。但し、STYLE_SAVEUNDERが指定されている場合は    そのまま画面が戻されます。これはダイアログボックスのような    親ウィンドウの削除時に子ウィンドウの削除により毎回他ウィン    ドウの描画をさせない場合に便利です。  ・DISAPPEARのサブメッセージ DISAPPEAR_NORMAL : DESTROY_NORMALと同じです。 DISAPPEAR_NODRAW : DESTROY_NODRAWと同じです。  ・NOTIFYのサブメッセージ NOTIFY_CHILDKILLED : 特に必要な場合、子ウィンドウが削除され    たことを親ウィンドウに通知します。 NOTIFY_UPDATE : ウィンドウ内のデータが変更されたことを    アプリケーションからウィンドウに通知します。 NOTIFY_CHILDCHANGED : 子ウィンドウの状態が変わったことを親    ウィンドウに通知します。このメッセージのExtraフィールドには    子ウィンドウのLHWINDOW構造体のアドレスを代入します。 NOTIFY_SORT : ListBoxウィンドウにソートを依頼します。    Extraフィールドにはソート順序(0:昇順、非0:降順)を代入しま    す。 NOTIFY_USER : NOTIFY_USERから始まる値をサブメッセージ    としてアプリケーション内で定義します。  ・COMMANDのサブメッセージ CMD_DONE : DialogBoxハンドラでのみ認識され、dialogbox    ウィンドウに(KEYSTROKE, F10, 0)のメッセージを送ります。 CMD_ESC : DialogBoxハンドラでのみ認識され、自己を    DESTROYします。 CMD_DIALOGFOCUS : DialogBoxハンドラでのみ認識され、Extraフィ    ールドで指定された値に相当するdialogコントロールにフォーカス    を与えます。 CMD_PUSHB_ACTIVE : PushButtonウィンドウに、アクティブになって    定義した動作を行うように命令します。 CMD_USER : CMD_USERから始まる値をサブメッセージとして    アプリケーション内で定義します。  ・DRAWのサブメッセージ(ビットマスクの為ORで複合指定が可能) DRAW_TITLE : タイトルを描画させます。 DRAW_FKEYS : ファンクションキーを描画させます。 DRAW_CLIENT : ウィンドウのクライアントエリア(タイトル    枠を除いた部分)やワークスペースを描画させます。 DRAW_CLIENT_UPDATE : カーソル位置以降を描画させます。editウィ    ンドウで削除や挿入を行った際に使用します。 DRAW_CLIENT_CHAR : editウィンドウにカーソル位置の文字だけを    描画させます。 DRAW_FRAME : ウィンドウの枠を描画させます。 DRAW_CURSOR : ウィンドウのカーソルを表示させます。 DRAW_USER : DRAW_USERのビットから始まる値をアプリケ    ーションで定義します。 DRAW_ALL : ウィンドウの全領域を描画させます。この    メッセージはウィンドウを作成した際に自動的に送られます。  ・SETFOCUSのサブメッセージ SETFOCUS_NORMAL : 新しいフォーカスウィンドウがメッセージを受    け取った後に、古いフォーカスウィンドウにLOSEFOCUSメッセージ    を送ります。 SETFOCUS_NOLOSE : 古いフォーカスウィンドウにLOSEFOCUSメッセー    ジを送るのを抑制します。 SETFOCUS_SELECT : CheckBoxでのみ使用され、フォーカスを得た直    後に[SPACE]を押したと同等の効果を為します。  ・LOSEFOCUSのサブメッセージ LOSEFOCUS_NORMAL : 普通にLOSEFOCUSメッセージを送信します。 LOSEFOCUS_MENU : 作成やフォーカスの付与に先だってmenuウィン    ドウにLOSEFOCUSを送信します。 ============ ここまで =============  しばらく休もうかと思っていたのですが、サンプルプログラムを理解 する上でメッセージに関する知識が必要なこと、メッセージの解説は比較 的短くできることから、一気に書きました。  内容的にはただの**ですので、根気だけの問題でしたが。 (^^;)  第四回が少々詰め込み過ぎでしたので、各部分の細かい説明も必要かと 思いましたが、LHAPIのプログラミングはMS-Winによく似ており、それ程 特殊でも無いため省きました。  要望が有れば、もう少しかみ砕いたバージョンも検討します。  一つだけ気になったので解説しますと、本連載ではウィンドウという表 現を多用しています。これは一般的なウィンドウ(枠とタイトルの付いた パネル状のもの)のことを指しているわけではなく(基本クラスにWindow クラスは存在しませんね)、各クラスの実体を指していると考えてくださ い。一般的なオブジェクト指向で呼ぶところのインスタンス、あるいは オブジェクトの意味になります。Windows用語ならコントロールです。例え ば、CheckBoxクラスの実体もウィンドウですし、DialogBoxもウィンドウ です。  多分、皆さんご理解いただけているとは思いますが、私自身が以前混同 して理解するのに時間をかけてしまいましたので、念のため。  次回以降は、各基本クラスの詳細について解説します。五回ぐらいを かけて各基本クラスの詳細と使用例を解説して、本連載は完結する予定 です。  質問、要望等は大歓迎ですので、気軽にお寄せ下さい。   ネタ作りのため次回は少し先です    JCG00070 Brahma でした

戻る

All contents and programs Copyright 1996,97,98 (C) by Masaki " Brahma " Tsumori all rights reserved.