数値を入力させるときアップダウンコントロールを使うと 制御が簡単です。今回はそれにバディウィンドウを 関連付けて制御をもっと簡単にしましょう。VB4以下でもOKです。 スピンコントロールとしてありますがアップダウンコントロールと同じです全 体 の 流 れ
| @Formにアップダウンコントロールウィンドウを作成 |
| これだけでカウントできます。しかも最大・最小値などの監視も全部やってくれます。 |
スピンコントロールを作成するにはCreateWindowEx()関数でもできますが CreateUpDownControls()関数のがまとめられていて便利です。スピンコントロールのスタイル
CreateUpDownControls()関数でウィンドウを作成するとき スタイルにWS_CHILD,WS_VISIBLE,WS_BORDERのいずれかの 標準メッセージを一つ含めなければないません。サンプルでは全部指定しています。 (そのほうが便利だし...。) またこれに加えて以下のスタイルを同時に複数指定することができます。
| スタイル | 内容 |
| UDS_ALIGNLEFT | バディウィンドウの左側に アップダウンコントロールを配置する |
| UDS_ALIGNRIGHT | バディウィンドウの右側に アップダウンコントロールを配置する |
| UDS_ARROWKEYS | 矢印キーを有効にする (矢印キーを使って移動可能にする) |
| UDS_AUTOBUDY | Zオーダーにおける前のウィンドウをバディウィンドウとする |
| UDS_HORZ = &H40 | アップダウンコントロールを水平に置く (デフォルトでは垂直に置かれる) |
| UDS_NOTHOUSANDS = &H80 | 大きい値をバディウィンドウに表示するとき コンマを表示しない (スピンコントロールのときのみ有効) |
| UDS_SETBUDDYINT = &H2 | コントロールの位置が変化したとき バディウィンドウ内のテキストを自動的に設定する これによりスピンコントロールの 現在位置をバディウィンドウに表示することができる |
| UDS_WRAP = &H1 | 端に達したときアップダウンコントロールの位置を折り返す |
スピンコントロールにメッセージを送るにはSendMessage()関数を使います。 基本的に送るメッセージは以下のとおりです(全部ではないです)。
| メッセージ | 意味 | wParam | lParam | 戻り値 |
| UDM_GETBUDDY | バディウィンドウのハンドル取得 | 0 | 0 | バディウィンドウのハンドル |
| UDM_GETPOS | 現在の位置(カウント)を取得 | 0 | 0 | 下位ワードに格納されている |
| UDM_GETRANGE | 現在の範囲を取得 | 0 | 0 | 下位ワードに最大値 上位ワードに最小値 |
| UDM_SETBUDDY | 新しいバディウィンドを指定 | 新しいハンドル | 0 | 以前のバディウィンドウのハンドル |
| UDM_SETPOS | 現在の位置(カウント)を設定 | 0 | 新しい位置 | 以前の位置 |
| UDM_SETRANGE | 現在の範囲を設定 | 0 | 下位ワードに最大値 上位ワードに最小値 | 以前の範囲 |
バディウィンドウとは相互にリンク付けられたウィンドウのことです。 つまりテキストボックスなどの表示するウィンドウなどです。 基本的にスピンコントロールはメッセージを送信するがありませんサンプル
ダウンロード(CreateUpDownControl2.lzh 2.94KB)
Private Sub Form_Load()
'アップダウンコントロールを作成する
hUpDownWnd = CreateUpDownControl(WS_CHILD Or WS_BORDER Or WS_VISIBLE _
Or UDS_SETBUDDYINT Or UDS_ALIGNRIGHT, _
10, 10, 50, 50, Me.hWnd, 100, App.hInstance, Me.Text1.hWnd, 100, 0, 50)
End Sub