-
Notifications
You must be signed in to change notification settings - Fork 1
OTW API
otya edited this page Oct 12, 2015
·
62 revisions
開発中 (OTW5.0-11) ボタンもテキストボックスもみんなウィンドウ
| 関数 | 説明 |
|---|---|
| GetWindowControl() | Windowのコントロールを取得 |
| NewControl NAME$ OUT CTL,ERR | 新しいコントロールを作る |
| ExtendControl NAME$,PARENT OUT CTL,ERR | 既存のコントロール(Windowなど)を継承 |
| CheckControl(CTL) | コントロールが正常かを確認 |
| DeleteControl(CTL) | コントロールを削除 |
Handlerの書式 COMMONは付ける
COMMON DEF XXX WND,CTL,TYPE,A1,A2
| 関数 | 説明 | 引数1 | 引数2 |
|---|---|---|---|
| SetControlPainter(CTL,HANDLER$) | コントロールの描画イベントを処理する関数の登録 | 無 | 無 |
| SetControlLMouseUpHandler(CTL,HANDLER$) | 左クリック(ボタンから離されたとき)のイベントを処理する関数の登録 | X | Y |
| SetControlLMouseDownHandler(CTL,HANDLER$) | 左クリック(ボタンが押されたとき)のイベントを処理する関数の登録 | X | Y |
| SetControlMouseMoveHandler(CTL,HANDLER$) | マウスが移動したときのイベントを処理する関数の登録 | XY | マウスの状態 |
| SetControlNotificationHandler(CTL,HANDLER$) | 通知(ボタンがクリックされた、Enterが押された)など |
|
|
| SetControlKeyHandler(CTL,HANDLER$) | キーが押されたとき | BUTTON()から特殊キーを覗いた値 | |
| SetCotrolChFocusHandler(CTL,HANDLER$) | フォーカスが変わった時 | フォーカスが移ったらTRUE |
10
0b00
bit 0CTL_LBTNFLG
bit 1CTL_RBTNFLG
1なら左クリック,2なら右クリック,3なら両方
IF BTN AND GetControlStateLBtn()THEN ~左クリック
IF BTN AND GetControlStateRBtn()THEN ~右クリック| 関数 | 説明 |
|---|---|
| GetRootWND() | ルートウィンドウを取得->GetRootWindow()にしたい |
| CheckWindow(WND) | ウィンドウが正常化を確認 |
| WindowBackFlag() | NewWindowで指定するフラグ, ウィンドウを後ろに配置する |
| WindowFrontFlag() | NewWindowで指定するフラグ, ウィンドウを前に配置する |
| WindowHideFlag() | NewWindowで指定するフラグ, ウィンドウを非表示にする |
| NewWindow CTL,NAME$,X,Y,WIDTH,HEIGHT,PARENT,FLG OUT WND,ERR | コントロールと名前と座標とサイズと親ウィンドウとフラグを使ってウィンドウを作成 |
| NewTopLevelWindow CTL,NAME$,WIDTH,HEIGHT OUT WND,ERR | コントロールと名前とサイズを使ってウィンドウを作成 |
| WindowResizableStyle() | ... |
| WindowHideStyle() | ... |
| FrontWindow(WND) | ウィンドウを手前に持ってくる |
| MoveWindow(WND,X,Y) | ウィンドウを指定座標に持っていく |
| SendWindowEvent(WND,TYPE,A1,A2) | ウィンドウへイベントを送信 |
| RepaintWindow(WND) | ウィンドウへ再描画イベントを送信 |
| CallBaseControlHandler(WND,CTL,TYPE,A1,A2) | (イベントのハンドラーで)親ハンドラを呼び出し |
| PeekWindowEvent(WND)->OUT CTL,TYPE,A1,A2 | ウィンドウのイベントキューの先頭を削除せずに帰す |
| UpdateWindow(WND) | ウィンドウのイベントを処理 |
| GetWindowName$(WND) | ウィンドウの名前を取得 |
| GetWindowWidth(WND) | ウィンドウの幅を取得 |
| GetWindowHeight(WND) | ウィンドウの高さを取得 |
| GetWinVer$() | バージョンを取得("5.0"など) |
| GetWindowX(WND) | ウィンドウのX座標を取得 |
| GetWindowY(WND) | ウィンドウのY座標を取得 |
| GetNextWindow(WND) | 次のウィンドウ(前面)を取得,失敗したら0が返る |
| GetPrevWindow(WND) | 次のウィンドウ(後面)を取得,失敗したら0が返る |
| GetParentWindow(WND) | 親ウィンドウを取得 |
| GetChildWindow(WND) | 子ウィンドウを取得(一番後ろ) |
| 関数 | 説明 |
|---|---|
| GBeginWindow(WND) | 描画開始を明示的に宣言する |
| GEndWindow(WND) | 描画終了を明示的に宣言する |
| GPSETWindow WND,X,Y,COL | ウィンドウに点を書く |
| GFILLWindow WND,X,Y,X2,Y2,COL | |
| GBOXWindow WND,X,Y,X2,Y2,COL | |
| GPRINTWindowCC WND,X,Y,STR$,PAL | コンソール色で文字を表示 |
| GPRINTWindow WND,X,Y,STR$,COL | |
| GLOADWindow WND,X,Y,W,H,IMG[],FLG,MODE | |
| GCOPYWindow WND... | 廃止予定 |
| 関数 | 説明 |
|---|---|
| GetWindowControl() | ウィンドウを表示するコントロール |
| GetButtonControl() | ボタンを表示するコントロール |
| GetToggleButtonControl() | トグルボタンを表示するコントロール |
| GetTextBoxControl() | テキストボックスを表示するコントロール |
| GetLabelControl() | 文字を表示するコントロール |
| SetLabelAlignCenter LABEL | 文字を中央 |
| SetLabelAlignLeft LABEL | 文字を左寄せ(デフォルト) |
| SetLabelAlignRight LABEL | 文字を右寄せ |
VAR TESTOTWCTL,TESTOTWWND
DEF I_TEST
IF!CHKCALL("IsWinRunning")||!IsWinRunning()THEN'OTWが存在するか、存在した場合動いているか
ExitProcess 1
RETURN
ENDIF
VAR E
ExtendControl "TEST",GetWindowControl() OUT TESTOTWCTL,E'Windowコントロールを継承する
IF E THEN ExitProcess 1RETURN
E=SetControlPainter(TESTOTWCTL,"TESTOTWPainter")
NewTopLevelWindow TESTOTWCTL,"TEST",64,64 OUT TESTOTWWND,E
IF E THEN ExitProcess 1
END
DEF TESTOTWPainter WND,CTL,T,A1,A2
VAR E=CallBaseControlHandler(WND,CTL,T,A1,A2)'親のハンドラを呼び出す(これを呼ばないと枠が描画されない)
IF E THEN RETURN
E=GBeginWindow(WND)
IF E THEN RETURN
GFILLWindow WND,0,0,64,64,RGB(0,0,0)
GPRINTWindow WND,0,0,"HELLO",RGB(255,255,255)
E=GEndWindow(WND)
END
DEF L_TEST
IF UpdateWindow(TESTOTWWND)THEN ExitProcess 1'ウィンドウが閉じられたりした
END- CTL_FRMBTNHANDLER
- CTL_LBTNFLG
- CTL_RBTNFLG
- CTL_BTNDWNFLG
- CTL_BTNUPFLG
文字列は"123"[0]みたいな使い方が可能
| 関数 |
|---|
| GetScreenWidth() |
| GetScreenHeight() |
| GetWinVer$() |
| MouseLeave |
| MouseDoubleClick |
これらのコントロールを継承する際は親コントロールのHandlerを呼び出す必要がある
| event | 説明 |
|---|---|
| Paint | 枠を描画 |
| ChFocus | 前面に移動 |
| event | 説明 |
|---|---|
| Paint | ボタンを描画 |
| LMouseUp | 親ウィンドウにNotifを送信 |
| 関数 | 説明 |
|---|---|
| GetVScrollBarControl() | 縦スクロールバーコントロールを取得 |
| NewVScrollBar PARENT,SIZ OUT WND,E | |
| SetScrollBarSize WND,SIZ | |
| SetScrollBarPostion WND,POS | ->Position |
| 関数 | 説明 |
|---|---|
| NewMenu OUT MENU,E | |
| SetMenuBar WND,MENU | 未実装 |
| ShowMenu MENU,WND | 未実装,引数の順番が定まっていない |
| GetWindowMenu(WND) | |
| AddMenuItem MENU,STR$,IVAR | |
| AddMenuItemSeparator MENU | |
| CheckMenu(MENU) | |
| NewTopLevelMenuWindow CTL,NAME$,WIDTH,HEIGHT OUT WND,ERR |
| 関数 | 説明 |
|---|---|
| JoinWindowGroup(WND,WND2) | |
| LeaveWindowGroup WND | 未実装 |
| GetWindowGroupOwner(WND) |
| 関数 | 説明 |
|---|---|
| NewDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER,FLAG) | |
| NewModalDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER) | |
| NewModelessDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER) |
ウィンドウに対しての操作を効率化する 子ウィンドウを一々削除していたら再描画リクエストが一々確認されたりして非常に遅い それをEndWindowOPでまとめてやる
| 関数 | 説明 |
|---|---|
| BeginWindowOP(WND) | |
| EndWindowOP(WND) | |
| MoveWindow2(WND,X,Y) | ->MoveWindowOP(WND,X,Y) |