OXlib++プログラム
旧OXlibからの変更
従来の OXlib は言語Cで記述されていたためクラス派生が困難で、ほとんどの機能が基底クラスに実装されていた。
OXlib++はC++を前提にしているので、クラスの実装そのものが旧 OXlib からかなり変更されている。
基底クラスから他のクラスへ移動したリソース
OXlib++では積極的にクラス派生を使用している。
ゆえに、旧 OXlib の Base Class のメンバはずいぶん減少している。
-
OXtextCクラスへ移動
- usint topaln:1; //文字を上詰めに表示(False)
- usint botaln:1; //文字を下詰めに表示(False)
- usint leftaln:1; //文字を左詰めに表示(False)
- usint rightaln:1; //文字を右詰めに表示(False)
-
OXwinManCクラスへ移動
- usint winman:1; //Window managerの介在を受ける
- usint dswmsize:1; //Window managerによるresizeを受付けない
- usint dswmpos:1; //Window managerによる位置移動を受付けない
- usint appmodal:1; //モード付きBOX(閉じるまで他処理禁止)
- usint fcsunmap:1; //Focusを失ったとき自動的にunmapされる
-
OXcallbackCクラスへ移動
- int result; //操作の結果
- int status; //現在のBOXの状態
- int argument; //cbfunc()に使用する汎用引数
- int (*cbfunc)(); //ユーザのコールバック関数
-
独立したメンバとして実装
- usint button1:1; //マウスボタン1を有効にする
- usint button2:1; //マウスボタン2を有効にする
- usint button3:1; //マウスボタン3を有効にする
-
名前の変更されたリソース
名前の変更されたリソース
旧 OXlib では簡単にリソースを追加できないため rOXsizeOption を多目的に利用していた。
OXlib++ではそのようなリソースはすべて改められた。
- rOXsizeOption --> rOXsizeShadow box.iMsizeShadow //影の高さ
名前の変更されたフラッグ(直接使用するとき分かりやすいように)
- usint nounmap:1; --> noUnmap //一度mapすれば永久にunmapされない
- usint nodestroy:1; --> noDestroy //永久にWindowやPixmapが破棄されない
名前が変更され、意味が逆になったフラッグ(直接使用するとき分かりやすいように)
- usint dsautomap:1 --> autoMap //上位がmapされても自動的にmapされない-->される
- usint dsautomake:1; --> autoMake //上位がmakeされても自動的にmakeされない-->される
- usint inhfocus:1; --> setFocus //ButtonPressでFocusをセットしない-->する
無理矢理リソース名に当てていた操作関数
旧OXlibではメンバ関数そのものが実装できなかったので、すべての操作をリソース名でおこなっていた。
- rOXfocus--> SetFocus()
- rOXpointerPos --> GetPointerPos() SetPointerPos()
- rOXwaitView --> WaitView()
- rOXraiseTop --> RaiseTop()
廃止されたリソース
C++の仕様上不要なリソースを廃止した。
- rOXreference box.etc //多目的pointer参照リソース
- rOXetcResource box.etc //特別リソースへのPointer
- rOXpixmap box.drawmap[BITMAPNUM]; //描画に使うPixmapやBitmap
- rOXprevlBox box.prevlBox //同一レベル、前のBOX
- rOXnextlBox public member //同一レベル、後のBOX
- rOXupperBox public member //上のレベルのBOX
- rOXlowerBox public member //下のレベルのBOX
- rOXownCon box.ownCon //部品へのPoiner
部品構造体
旧 OXlib は部品クラスを定義するのに部品構造体 を使っていた。
OXlib++の場合、クラス定義そのものであるので、インスタンスとクラスを分けて定義する必要はなくなった。
部品の動作特性を表すフラッグは各クラスに仮想関数として実装されている。
従来 OXCONP 定義されていたデフォルトのイベント処理に関するフラッグは、OXmainC に仮想関数として実装されている。
従来の OXCONP 構造体メンバの変更を以下にまとめる。
-
typedef struct _OXDRWS{
- usint window:1; Windowをつくる ==>MakeBox()
- usint pixmap:1; Pixmapをつくる ==>MakeBox()
- usint bitmap:1; Bitmapをつくる ==>MakeBox()
- usint num:3; OXmakeBox()時つくるDrawableの枚数 ==>MakeBox()
- usint mapfocus:1; Map時Focusをもつ ==> MapBox()
- usint prsfocus:1; Mouse Press時にFocusをもつ ==> MapBox()
- usint dslbell:1; Deselのマウスクリック時ブザー ==> evButtonPress()
- usint nocmpex:1; Exposeイベントを圧縮しない ==> evExpose()
- usint prtfont:1; Printer Fontを使用する ==> PrintBox()
} OXDRWP;
-
typedef struct _OXCONS{
- dword patGrp; この部品の部品類名 ==>廃止
- long mask; この部品で受け付けるEvent mask ==>OXpartsC
- OXDRWP draw; BOXを作るときの仕様 ==>(1)参照
- int (*makefunc)(); OXmakeBox()の直後に実行される初期化関数 ==>仮想関数 MakeBox()
- int (*destfunc)(); OXdestroyBox()の直前に実行される終了関数 ==>仮想関数 DestroyBox()
- OXEVTP *evtTbl; Event関数翻訳テーブルのPointer ==>仮想関数evXXXX()
- OXEVTP *rgetTbl; GetResource 関数翻訳テーブルのPointer ==>各部品クラスに実装
- OXEVTP *rputTbl; SetResource 関数翻訳テーブルのPointer ==>各部品クラスに実装
- OXEVTP *keyTbl; Key関数翻訳テーブルのPointer ==>各部品クラスに実装
- _OXCONPP super; この部品のSuperClassへのPointer ==> OXpartsC
- int (*mapfunc)(); OXmapBox()の直後に実行される初期化関数 ==>仮想関数 MapBox()
- int (*unmapfunc)() OXunmapBox()の直前に実行される終了関数 ==>仮想関数 UnmapBox()
- char* name; 部品名 ==>OXpartsC
- short pno; 部品番号 ==>廃止
- short kind; 部品 配置の種類 0:Normal 1:fixed ==>廃止
- byte boxW; どちらかの大きさを100としたときの幅 ==>廃止
- byte boxH; どちらかの大きさを100としたときの高さ ==>廃止
- byte xoffs; たくさん配置したとき+するX方向offset ==>廃止
- byte yoffs; たくさん配置したとき+するY方向offset ==>廃止
- short cmpnum; 特別リソースに関する情報の数 ==>廃止
- short mknum; 下位BOXを作成するための情報の数 ==>廃止
- OXCMRP *cmpres; 特別リソースに関する情報 ==>廃止
- OXLOWP *mklow; 下位BOXを作成するための情報 ==>廃止
- char **cbspec; コールバック関数 の引数の定義 ==>廃止
} OXCONP;
-







