戻る


SUBJ:【不定期連載】LHAPI入門 6  この連載は、HP100/200LX(以下100LXと表記)の内蔵インターフェース ルーチンであるLHAPI(Lotus Handheld Application Programming Interface)の入門です。  今回からLHAPIの基本クラスについて解説します。今回は全クラスの親 クラスであるObjectクラスについてです。 ============ ここから ============= 7 Objectクラス  Objectクラスは総てのクラスの親クラスにあたります。すなわち、総て のクラスはObjectクラスを継承しており、その機能を使うことができます。  Objectクラスの機能とは、   ・ウィンドウの作成     作成といっても実体はプログラム内で生成しており、実際には     ウィンドウの有効化と言い換えられます。内部的にはLHWINDOW     構造体のNextWndとPrevWndにより構成されるウィンドウ同士の     繋がり(ウィンドウチェインと呼びます)に加えています。   ・ウィンドウの削除     これも実際にはウィンドウチェインから外しているだけです。     確保した実体を解放している訳ではありません。また、ウィン     ドウにより隠された背面の再描画も行います。   ・ウィンドウの表示   ・ウィンドウの消去   ・フォーカスの移動 などの、ウィンドウに必要な基本機能です。  Objectクラスは、他の基本クラスの機能を必要としないクラスを作成 したい場合に親クラスとして使用します。  例えば、アプリケーションのメイン処理を行うウィンドウはObject クラスのサブクラスにして、そのハンドラ内で必要な処理を行います。 そして、ユーザーとのインターフェースとなるDialogBox等は各基本 クラスのサブクラス(あるいは基本クラスをそのまま)とします。  以下にObjectクラスにおけるLHWINDOW構造体の各メンバの意味を示し ます(第三回の解説を参照して下さい)。  ・x,y,w,h    ウィンドウのサイズを示します。STYLE_XYRELATIVE指定により    x,y座標は親ウィンドウからの相対位置となり、STYLE_SAVEUNDER    指定によりウィンドウの範囲をスクリーンバッファに保存します。  ・Title, Data, LogicalSize    未使用です。  ・Style    ウィンドウのスタイルを定義します。    STYLE_SAVEUNDER : APPEARメッセージにより背面の領域を保存し     DISAPPEARメッセージにより復元します    STYLE_INVlSIBLE : CREATEメッセージによる自ウィンドウへの     APPEARメッセージを抑止します    STYLE_LEAF : 効率向上のため、子ウィンドウを再帰的に     削除するDESTROYメッセージを阻止します  ・Parent    親ウィンドウを定義します。ウィンドウの親子関係を形成する    ことにより効率的にメッセージの流れを制御することができます。  ・FKeys    LHFKEY構造体(の配列)へのポインタを代入します。各ウィンドウ    は各々にFKeys構造体を持っています。その為、フォーカスされた    ウィンドウ毎に異なったファンクションキーを表示することが可能    になります。但し、ウィンドウがファンクションキーを必要とする    とは限りません。NO_FKEYSを指定するとファンクションキーは表示    されません(黒枠は表示されます)。PARENT_FKEYSを指定すると    親ウィンドウの定義をそのまま使用します。  ・Menu    LHMENU構造体(の配列)へのポインタを代入します。FKeysと同様の    特徴を持ち、NO_MENUやPARENT_MENUを指定することが可能です。  ・Selection, WindowTop    未使用です。  次に各メッセージのObjectクラスにおける特徴を示します。各メッセー ジの基本的な意味は第五回の解説を参照して下さい。  ・KEYSTROKE    入力がファンクションキーだった場合には、LHFKEY構造体で定義    した動作を実行します。また、LHMENU構造体で定義したホットキー    だった場合には、そのメニューを選択したのと同じ動作をします。    但し、いずれの場合もウィンドウがフォーカスを得ていることが    前提です。通常はイベントループ内のディスパッチで、フォーカス    を得ているウィンドウにKEYSTROKEメッセージを送りますので気に    する必要はありません。  ・DRAW    サブメッセージのDRAW_FKEYビットがONの場合、ファンクションキー    を描画します。  ・CREATE    ウィンドウの作成中にはLHWINDOW構造体のStatusメンバの    STATUS_INCREATEビットがONになります。これを利用してウィン    ドウ作成中は通常時と異なった動作をさせることが可能です。    ウィンドウチェインの構築はCREATEメッセージを受けた時点で行わ    れます。アプリケーションで最初のウィンドウへのポインタは    LHAPIBLOCK構造体のFirstWndメンバに収められます。また最新の    ウィンドウへのポインタはLastWndメンバに収められます。そして    各ウィンドウのLHWINDOW構造体のPrevWndメンバには自分の直前に    CREATEメッセージを受けたウィンドウへのポインタ、NextWndメンバ    には直後にCREATEメッセージを受けたウィンドウへのポインタが    収められます。    CREATEメッセージを受けた時点でStyleメンバのSTYLE_INVISIBLE    ビットがOFFでありStatusメンバのSTATUS_VISIBLEビットがOFFで    ある場合、自ウィンドウにAPPEARメッセージを送りウィンドウを    表示させます。    これらの処理が終わると、STATUS_INCREATEはOFFにされます。  ・DESTROY    LHWINDOW構造体のStyleメンバのSTYLE_LEAFビットがONになって    いない場合は、DESTROYメッセージを受けたウィンドウの子ウィン    ドウにもDESTROYメッセージが送られます。    DESTORYメッセージを受けると、まず自ウィンドウをウィンドウ    チェインから離脱させます(ウィンドウチェインとウィンドウの    親子関係は別物です)。次にStyleメンバのSTYLE_NOTIFYビットが    ONの場合は、親ウィンドウにNOTIFYメッセージ(サブメッセージ    がNOTIFY_CHILDKILLED)を送ります。次に自ウィンドウを画面から    消去するためにDISAPPEARメッセージを自ウィンドウに送ります。    最後にLHAPIBLOCK構造体のFocusWndメンバが自ウィンドウならば、    親ウィンドウにフォーカスを移します。  ・TERMINATE    未使用です。    アプリケーションの正常終了時に総ての有効なウィンドウがこの    メッセージを受けますので、ウィンドウのパラメーターの保存など    に応用することができます。  ・ACTIVATE    未使用です。    アプリケーションの再アクティブ化時に、ReactivateLHAPIにより    総ての有効なウィンドウにこのメッセージが送られます。  ・DEACTIVATE    Objectクラスでは使っていません。    タスクスイッチでバックグラウンドに移行する際に総ての有効な    ウィンドウがこのメッセージを受けます。  ・SETFOCUS    SETFOCUSメッセージを受けると、まず現在フォーカスを持っている    ウィンドウにLOSEFOCUSメッセージを送ります。その結果が成功だっ    た場合にはフォーカスを得ます。失敗だった場合は何もしません。  ・NULLEVENT    未使用です。  ・LOSEFOCUS    LHAPIBLOCKのFocusWndメンバにNULLをセットします。  ・NOTIFY    親ウィンドウにNOTIFYメッセージを送り、その返り値をObject    クラス(ハンドラ)の返り値とします。  ・COMMAND    親ウィンドウに渡します。  ・APPEAR    ウィンドウの可視化を行います。同様のメッセージにDRAWがありま    すが、APPEARの場合はウィンドウで隠れる部分の画面を保存する点    が違います。このメッセージを受けると、まずLHWINDOW構造体の    StatusメンバのSTATUS_VISIBLEビットをONにします。そして、Style    メンバのSTYLE_SAVEUNDERビットを確認し、ONならばウィンドウで    隠れる部分の画面を保存し、自ウィンドウにDRAWメッセージを送り    ます。  ・DISAPPEAR    ウィンドウの不可視化を行います。DISAPPEARを受信すると、まず    StatusメンバのSTATUS_VISIBLEビットをOFFにし、Styleメンバの    STYLE_SAVEUNDERビットを確認します。STYLE_SAVEUNDERビットが    ONならば保存しておいた部分を再描画し、OFFならば全画面を    再描画します。 注:NKIT004の時点では、LXAPI.HにおいてStatusメンバに関する定数は   定義されていません。使用したい場合は以下のように定義して下さい。 #define STATUS_INCREATE 0x08 #define STATUS_VISIBLE 0x80 ============ ここまで =============  もう少し休んでネタを作ってから再開する予定でしたが、NKITの公開に より盛り上がりをみせていますので、急いで第六回を書きました。  Objectクラスは総てのクラスの基本ですので、確実に理解しておいて 下さい。  次回は、基本的な部品のクラスであるDialog Control Classについて 解説します。  質問、要望等は大歓迎ですので、気軽にお寄せ下さい。   今回はサンプルは無しです    JCG00070 Brahma でした

戻る

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