アップダウンコントロールの作成(U)          <TOP>


CreateWindowExでアップダウンコントロールを作成します。

CreateWindowEx ウインドウ(コントロール)を作成

DestroyWindow CreateWindowExの解放

InitCommonControls コモンコントロールのウィンドウクラスを登録して初期化

SetParent 指定された子ウィンドウの親ウィンドウを変更

 

 
'================================================================
'= アップダウンコントロールをコードで作成(U)
'=    (CreateWindowEx5.bas)
'================================================================
#include "Windows.bi"

#define UPDOWN_CLASS "msctls_updown32"
#define WS_CHILD &H40000000             '親ウィンドウを持つコントロール(子ウィンドウ)を作成する
#define WS_VISIBLE &H10000000           '可視状態のウィンドウを作成する

#define UDS_AUTOBUDDY &H10              'Zオーダが一つ前のウィンドウを自動的にバディとする
#define UDS_HORZ &H40                   '水平アップダウンにする

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

' CreateWindowExの解放
Declare Function Api_DestroyWindow& Lib "user32" Alias "DestroyWindow" (ByVal hWnd&)

' コモンコントロールライブラリからコモンコントロールのウィンドウクラスを登録して初期化
Declare Sub Api_InitCommonControls Lib "comctl32" Alias "InitCommonControls" ()

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' 指定された子ウィンドウの親ウィンドウを変更
Declare Function Api_SetParent& Lib "user32" Alias "SetParent" (ByVal hWndChild&, ByVal hWndNewParent&)

Var Shared Text1 As Object
Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Edit3 As Object
Var Shared Button1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Edit3.Attach GetDlgItem("Edit3") : Edit3.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared UDControl As Long

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    Api_InitCommonControls

    'TextBoxに作成
    UDControl = Api_CreateWindowEx(0, UPDOWN_CLASS, ByVal 0, WS_VISIBLE Or WS_CHILD, Text1.GetWidth - 20, 0, 5, 20, GethWnd, 0, GethInst, ByVal 0)
    Ret = Api_SetParent(UDControl, Text1.GethWnd)

    'EditBoxに作成(垂直)
    UDControl = Api_CreateWindowEx(0, UPDOWN_CLASS, ByVal 0, WS_VISIBLE Or WS_CHILD, Edit1.GetWidth - 20, 0, 5, 20, GethWnd, 0, GethInst, ByVal 0)
    Ret = Api_SetParent(UDControl, Edit1.GethWnd)

    'EditBoxに作成(水平)
    UDControl = Api_CreateWindowEx(0, UPDOWN_CLASS, ByVal 0, WS_VISIBLE Or WS_CHILD Or UDS_HORZ, 0, Edit2.GetHeight - 14, 66, 10, GethWnd, 0, GethInst, ByVal 0)
    Ret = Api_SetParent(UDControl, Edit2.GethWnd)

    'Form上の指定した位置に作成
    UDControl = Api_CreateWindowEx(0, UPDOWN_CLASS, ByVal 0, WS_VISIBLE Or WS_CHILD, 190, 35, 10, 24, GethWnd, 0, GethInst, ByVal 0)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Var Ret As Long

    Ret = Api_DestroyWindow(UDControl)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End