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 コントロールと名前とサイズを使ってウィンドウを作成
NewStyleWindowArg CTL,NAME$,X,Y,WIDTH,HEIGHT,PARENT,FLG,STYLE,A1,A2 引数を使ってスタイル指定されたウィンドウ作成
NewStyleWindow CTL,NAME$,X,Y,WIDTH,HEIGHT,PARENT,FLG,STYLE スタイル指定されたウィンドウ作成
NewTopLevelStyleWindowArg CTL,NAME$,WIDTH,HEIGHT,FLG,STYLE,A1,A2 引数を使ってスタイル指定されたトップレベルウィンドウ作成
NewTopLevelStyleWindow CTL,NAME$,WIDTH,HEIGHT,FLG,STYLE スタイル指定されたトップレベルウィンドウ作成
WindowMenuStyle() メニュー付きにさせるフラグ
WindowResizableStyle() リサイズ可能にさせるフラグ
WindowHideStyle() 非表示にさせるフラグ
FrontWindow(WND) ウィンドウを手前に持ってくる
MoveWindow(WND,X,Y) ウィンドウを指定座標に持っていく
ResizeWindow(WND,W,H) ウィンドウをリサイズ
MoveResizeWindow(WND,W,H) ウィンドウを移動してリサイズ
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) 子ウィンドウを取得(一番後ろ)
GetControl(WND) ウィンドウのコントロールを取得
IsFocusWindow(WND) ウィンドウがフォーカスされていればTRUE
IsActiveWindow(WND) ウィンドウがアクティブであればTRUE
ShowWindow(WND) 非表示ウィンドウを表示させる
HideWindow(WND) ウィンドウを非表示にする(bug?)
GetBackColor() ウィンドウのデフォルト背景色を取得

Graphic

関数 説明
GBeginWindow(WND) 描画開始を明示的に宣言する
GEndWindow(WND) 描画終了を明示的に宣言する
SetWindowDrawPos WND,X,Y 描画の始点を変更(デフォルトで(0,0)
GPSETWindow WND,X,Y,COL ウィンドウに点を書く
GFILLWindow WND,X,Y,X2,Y2,COL
GBOXWindow WND,X,Y,X2,Y2,COL
GetConsolePalette(PAL) コンソールの色を取得
GPRINTWindowCC WND,X,Y,STR$,PAL コンソール色で文字を表示
GPRINTWindow WND,X,Y,STR$,COL
GPRINTBWindow WND,X,Y,STR$,COL,BC 背景色を指定してGPRINT
GPUTCHRWindow WND,X,Y,A,COL
GPUTCHRSizeWindow WND,X,Y,A,SX,SY,COL サイズ(SX:SY)を指定してGPUTCHR
GPUTCHRSize1Window WND,X,Y,A,SX,COL サイズ(S:S)を指定してGPUTCHR
GPUTCHRBWindow WND,X,Y,A,COL,BC 背景色を指定してGPUTCHR
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を送信

操作

|関数|説明| |SetButtonAlignLeft WND|ボタンの文字を左寄りにする| |SetButtonAlignRight WND|ボタンの文字を右寄りにする| |SetButtonAlignCenter WND|ボタンの文字を中央に配置する|

Label

Scroll

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

NumUpDown

GetNumUpDownValue(WND)
SetNumUpDownRange WND,MIN,MAX

DropDownList

未実装

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