ウィンドウ(コントロール)をコードで作成 <TOP>
BUTTON、CHECK、GROUP、TEXT、EDIT、COMBOの各コントロールをコード上で作成します。
GetSysColor システムのCOLOR取得
CreateWindowEX 新しいウインドウ(コントロール)を作成
DestroyWindow ウインドウ(コントロール)の解放
MAINFORMは、可視なし、BUTTON1を貼り付ます。
起動後BUTTON1の表示色(COLOR_BTNFACE)を取得し、MAINFORMをその色で塗りつぶしています。
BUTTON1をクリックすることによりその他のコントロールを作成します。
TEXT1(中央揃え)を追加しました。EDIT2は複数行入力、水平垂直スクロールバー表示に設定しています。
作成するウインドウ(コントロール) | クラス名 |
ボタンコントロール(ボタン・ラジオ・チェック・グループ) | "Button" |
エディットボックス | "Edit" |
テキストボックス | "Static" |
コンボボックス | "Combobox" |
リストボックス | "ListBox" |
スクロールバー | "ScrollBar" |
参照
コントロールをVisual Styleに<コントロールをコード(WindowXPスタイル)で作成>
'================================================================
'= CreateWindowExのテスト
'= (CreateWindowEx.bas)
'================================================================
#include "Windows.bi"
' システムの背景色を取得
Declare Function Api_GetSysColor& Lib "user32" Alias "GetSysColor" (ByVal nIndex&)
#define COLOR_BTNFACE 15 '3Dオブジェクトの表面色
' ウィンドウ(コントロール)を作成
Declare Function Api_CreateWindowEx& Lib "user32" Alias "CreateWindowExA" (ByVal ExStyle&, ByVal ClassName$, ByVal WinName$, ByVal Style&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal Parent&, ByVal Menu&, ByVal Instance&, ByVal Param&)
' CreateWindowExの解放
Declare Function Api_DestroyWindow& Lib "user32" Alias "DestroyWindow" (ByVal hWnd&)
#define WS_BORDER &H800000 'フォームの枠線がある
#define WS_CHILD &H40000000 '親ウインドウを持つコントロール(子ウインドウ)を作成する
#define WS_CLIPSIBLINGS &H4000000 '兄弟関係にある子ウィンドウをクリップする
#define WS_EX_WINDOWEDGE &H100 'ウィンドウが盛り上がった縁の境界線を持つように指定
#define WS_EX_OVERLAPPEDWINDOW &H300 'WS_EX_WINDOWEDGEとWS_EX_CLIENTEDGEの組み合わせ
#define WS_VISIBLE &H10000000 '可視状態のウィンドウを作成する
#define WS_HSCROLL &H100000 '水平スクロールバーを持つウィンドウを作成する
#define WS_VSCROLL &H200000 '垂直スクロールバーを持つウィンドウを作成する
#define WS_EX_CLIENTEDGE &H200 '縁が沈んで見える境界線を持つウィンドウを指定
#define WS_THICKFRAME &H40000 'サイズ変更境界を持つウィンドウを作成する
#define BS_PUSHBUTTON &H0 'プッシュボタン
#define BS_AUTOCHECKBOX &H3 'チェックボックス
#define BS_AUTORADIOBUTTON &H9 'ラジオボタン
#define BS_GROUPBOX &H7 'グループボックス
#define ES_AUTOHSCROLL &H80 '入力範囲を越えたら自動的に水平スクロールする
#define ES_AUTOVSCROLL &H40 '最後の行で自動的に垂直スクロールをする
#define ES_CENTER 1 'テキストを水平方向で中央に表示する
#define ES_LEFT 0 'テキストを左揃えする(デフォルト)
#define ES_LOWERCASE &H10 '入力文字を小文字にする
#define ES_MULTILINE 4 '複数行エディットを作成する
#define ES_NOHIDESEL &H100 'フォーカスを失っても選択範囲を表示する
#define ES_NUMBER &H2000 '数値入力専用にする
#define ES_OEMCONVERT &H400 '入力文字をOEM文字セットに変換する
#define ES_PASSWORD &H20 '入力文字をデフォルトでは*にして表示する
#define ES_READONLY &H800 '読みとり専用にする(選択してコピーはできる)
#define ES_RIGHT 2 'テキストを右揃えする
#define ES_UPPERCASE 8 '入力文字を大文字にする
#define ES_WANTRETURN &H1000 '複数行エディットでEnterキーで改行する
#define CBS_SIMPLE &H1 '単純なコンボボックス。リストは常にドロップダウンされている
#define CBS_DROPDOWN &H2 'CBS_SIMPLEで、リストはドロップダウンアイコンで表示する
Var Shared Button1 As Object
Button1.Attach GetDlgItem("Button1")
'================================================================
'=
'================================================================
Declare Sub Mainform_Start edecl ()
Sub Mainform_Start()
Var rgbColor As Long
'Buttonの表面色を取得(EDE9EC)
rgbColor = Api_GetSysColor(COLOR_BTNFACE)
'Mainformを取得色で塗り
SetBackColor rgbColor
'画面を消去し
Cls
'Mainformを表示
ShowWindow -1
End Sub
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
Var StdStyles As Long
Var Ret As Long
'コマンドボタン作成
Ret = Api_CreateWindowEx(0, "Button", "BUTTON2", WS_CHILD Or WS_VISIBLE Or BS_PUSHBUTTON, 20, 50, 130, 24, GethWnd, 0, 0, 0)
'グループ作成
Ret = Api_CreateWindowEx(0, "Button", "GROUP1", WS_CHILD Or WS_VISIBLE Or BS_GROUPBOX, 20, 90, 130, 110, GethWnd, 0, 0, 0)
'チェックボタン作成
Ret = Api_CreateWindowEx(0, "Button", "CHECK1", WS_CHILD Or WS_VISIBLE Or BS_AUTOCHECKBOX, 30, 120, 110, 24, GethWnd, 0, 0, 0)
'ラジオボタン作成
Ret = Api_CreateWindowEx(0, "Button", "RADIO1", WS_CHILD Or WS_VISIBLE Or
BS_AUTORADIOBUTTON, 30, 160, 110, 24, GethWnd, 0, 0, 0)
'テキストボックス作成(境界線あり・3Dなし)
Ret = Api_CreateWindowEx(0, "Static", "TEXT1", WS_CHILD Or WS_VISIBLE Or
WS_BORDER Or ES_CENTER, 20, 210, 130, 24, GethWnd, 0, 0, 0)
'エディットボックス作成(境界線あり・3Dなし)
Ret = Api_CreateWindowEx(0, "Edit", "EDIT1", WS_CHILD Or WS_VISIBLE Or
WS_BORDER Or ES_LEFT , 180, 10, 130, 24, GethWnd, 0, 0, 0)
'エディットボックス作成(複数行入力あり・3Dあり)
StdStyles = WS_BORDER Or WS_CHILD Or WS_HSCROLL Or WS_VSCROLL Or WS_VISIBLE Or ES_AUTOHSCROLL Or ES_AUTOVSCROLL Or ES_MULTILINE Or ES_LEFT
Ret = Api_CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "EDIT2", StdStyles, 180, 40, 130, 80, GethWnd, 0, 0, 0)
'コンボボックス作成
Ret = Api_CreateWindowEx(0, "ComboBox", "COMBO1", WS_CHILD Or WS_VISIBLE Or CBS_SIMPLE Or CBS_DROPDOWN, 180, 130, 130, 100, GethWnd, 0, 0, 0)
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End