ウィンドウ(コントロール)をコードで作成             <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