Skip to content
otya edited this page Oct 12, 2015 · 62 revisions

OTYA WINDOW SYSTEM(OTW)

開発中 (OTW5.0-11) ボタンもテキストボックスもみんなウィンドウ

Control

関数 説明
GetWindowControl() Windowのコントロールを取得
NewControl NAME$ OUT CTL,ERR 新しいコントロールを作る
ExtendControl NAME$,PARENT OUT CTL,ERR 既存のコントロール(Windowなど)を継承
CheckControl(CTL) コントロールが正常かを確認
DeleteControl(CTL) コントロールを削除

Handler

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が押された)など そのウィンドウのVar0そのウィンドウのWND
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 ~右クリック

Window

関数 説明
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) 子ウィンドウを取得(一番後ろ)

Graphic

関数 説明
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... 廃止予定

標準GUI部品

関数 説明
GetWindowControl() ウィンドウを表示するコントロール
GetButtonControl() ボタンを表示するコントロール
GetToggleButtonControl() トグルボタンを表示するコントロール
GetTextBoxControl() テキストボックスを表示するコントロール
GetLabelControl() 文字を表示するコントロール
SetLabelAlignCenter LABEL 文字を中央
SetLabelAlignLeft LABEL 文字を左寄せ(デフォルト)
SetLabelAlignRight LABEL 文字を右寄せ

Sample

 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

flag memo

  • CTL_FRMBTNHANDLER
  • CTL_LBTNFLG
  • CTL_RBTNFLG
  • CTL_BTNDWNFLG
  • CTL_BTNUPFLG

文字列は"123"[0]みたいな使い方が可能

これから実装したいもの

関数
GetScreenWidth()
GetScreenHeight()
GetWinVer$()

message

MouseLeave
MouseDoubleClick

標準コントロール

これらのコントロールを継承する際は親コントロールのHandlerを呼び出す必要がある

Window

event 説明
Paint 枠を描画
ChFocus 前面に移動

Button

event 説明
Paint ボタンを描画
LMouseUp 親ウィンドウにNotifを送信

Label

Scroll

関数 説明
GetVScrollBarControl() 縦スクロールバーコントロールを取得
NewVScrollBar PARENT,SIZ OUT WND,E
SetScrollBarSize WND,SIZ
SetScrollBarPostion WND,POS ->Position

NumUpDown

Menu

関数 説明
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

Window Group

関数 説明
JoinWindowGroup(WND,WND2)
LeaveWindowGroup WND 未実装
GetWindowGroupOwner(WND)

Dialog

関数 説明
NewDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER,FLAG)
NewModalDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER)
NewModelessDialogBox(CTL,NAME$,WIDTH,HEIGHT,OWNER)

WindowOP

ウィンドウに対しての操作を効率化する 子ウィンドウを一々削除していたら再描画リクエストが一々確認されたりして非常に遅い それをEndWindowOPでまとめてやる

関数 説明
BeginWindowOP(WND)
EndWindowOP(WND)
MoveWindow2(WND,X,Y) ->MoveWindowOP(WND,X,Y)

Clone this wiki locally