Up-Down コントロールについて
アップダウン コントロールは、スクロール位置やコンパニオン コントロールに表示される数値 (バディ ウィンドウと呼ばれます) などの値をインクリメントまたはデクリメントするためにユーザーがクリックできる矢印ボタンのペアです。
ユーザーには、アップダウン コントロールとそのバディ ウィンドウは、多くの場合、1 つのコントロールのように見えます。 アップダウン コントロールは、バディ ウィンドウの横に自動的に配置し、バディ ウィンドウのキャプションを現在の位置に自動的に設定するように指定できます。 たとえば、アップダウン コントロールと編集コントロールを使用して、ユーザーに数値入力を求めることができます。 次の図は、編集コントロールをバディ ウィンドウとして持つアップダウン コントロールを示しています。この組み合わせは、スピン ボタン コントロールと呼ばれることもあります。

このセクションでは、次のトピックについて説明します。
Up-Down コントロールのスタイル
ウィンドウ スタイルを使用すると、バディ ウィンドウに対する相対的な位置付け方法、バディ ウィンドウのテキストを設定するかどうか、上方向キーと下方向キーを処理するかどうかなど、アップダウン コントロールの特性を操作できます。
UDS_ALIGNLEFTまたはUDS_ALIGNRIGHT スタイルのアップダウン コントロールは、バディ ウィンドウの左端または右端に揃えます。 バディ ウィンドウの幅は、アップダウン コントロールの幅に合わせて縮小されます。
UDS_SETBUDDYINT スタイルのアップダウン コントロールは、現在の位置が変わるたびに、そのバディ ウィンドウのキャプションを設定します。 コントロールは、 UDS_NOTHOUSANDS スタイルが指定されていない限り、10 進文字列の 3 桁ごとに桁区切り記号を挿入します。 バディ ウィンドウがリスト ボックスの場合、アップダウン コントロールは、キャプションの代わりに現在の選択を設定します。
UDS_ARROWKEYS スタイルを指定して、アップダウン コントロール用のキーボード インターフェイスを提供できます。 このスタイルを指定すると、コントロールは上下の方向キーを処理します。 また、このコントロールはバディ ウィンドウをサブクラス化して、バディ ウィンドウにフォーカスがあるときにこれらのキーを処理できるようにします。
水平スクロールにアップダウン コントロールを使用する場合は、 UDS_HORZ スタイルを指定できます。 このスタイルでは、上下ではなく、上下のコントロールの矢印が左右に向きます。
既定では、ユーザーが増分または最大値または最小値を超えてデクリメントしようとした場合、現在の位置は変更されません。 この動作は 、UDS_WRAP スタイルを使用して変更できるため、位置が逆の極端に "ラップ" されます。 たとえば、上限を超えてインクリメントすると、位置が下限に戻ります。
位置と加速度
アップダウン コントロールが作成されたら、メッセージを送信することで、コントロールの現在位置、最小位置、最大位置を変更できます。 また、バディ ウィンドウに現在位置を表示するために使用される基数ベースと、上矢印または下矢印をクリックしたときに現在の位置が変化する速度を変更することもできます。
アップダウン コントロールの現在位置を取得するには、 UDM_GETPOS メッセージを使用します。 バディ ウィンドウを含むアップダウン コントロールの場合、現在の位置はバディ ウィンドウのキャプション内の番号です。 キャプションが変更された可能性があるため (たとえば、ユーザーが編集コントロールのテキストを編集した場合など)、アップダウン コントロールは現在のキャプションを取得し、それに応じて現在の位置を更新します。
バディ ウィンドウのキャプションは、アップダウン コントロールの基数 (つまり、基数 10 または 16) に応じて、10 進数または 16 進数の文字列にすることができます。 UDM_SETBASE メッセージを使用して基数ベースを設定し、UDM_GETBASE メッセージを使用して基数ベースを取得できます。
UDM_SETPOS メッセージは、バディ ウィンドウの現在位置を設定します。 スクロール バーとは異なり、上下の矢印をクリックすると、上下のコントロールによって現在の位置が自動的に変更されることに注意してください。 したがって、アプリケーションは、WM_VSCROLLまたはWM_HSCROLL メッセージを処理するときに現在の位置を設定する必要はありません。
UDM_SETRANGE メッセージを使用して、アップダウン コントロールの最小位置と最大位置を変更できます。 最大位置は最小値より小さい場合があり、その場合は上矢印ボタンをクリックすると現在の位置が減少します。 別の言い方をすると、アップは最大位置に向かって移動することを意味します。 アップダウン コントロールの最小位置と最大位置を取得するには、 UDM_GETRANGE メッセージを使用します。
ユーザーが下方向ボタンを押したときに位置が変化する速度を制御するには、アップダウン コントロールの高速化を設定します。 アクセラレーションは、 UDACCEL 構造体の配列によって定義されます。 各構造体は、時間間隔と、その間隔の最後にインクリメントまたはデクリメントする単位数を指定します。 高速化を設定するには、 UDM_SETACCEL メッセージを使用します。 高速化情報を取得するには、 UDM_GETACCEL メッセージを使用します。
既定のUp-Down コントロールのメッセージ処理
このセクションでは、アップダウン コントロールによって処理される標準的なWindows メッセージについて説明します。
| Message | 実行される処理 |
|---|---|
| WM_CREATE | プライベート データ構造を割り当てて初期化し、そのアドレスをウィンドウ データとして保存します。 |
| WM_DESTROY | WM_CREATE処理中に割り当てられたデータ を 解放します。 |
| WM_ENABLE | ウィンドウを無効にします。 |
| WM_KEYDOWN | 上方向キーまたは下方向キーの場合の現在位置を変更します。 |
| WM_KEYUP | 位置の変更を完了します。 |
| WM_LBUTTONDOWN | マウスをキャプチャします。 バディ ウィンドウが編集コントロールまたはリスト ボックスの場合、フォーカスはバディ ウィンドウに設定されます。 マウスが上下のボタンの上にある場合は、位置の変更を開始し、タイマーを設定します。 |
| WM_LBUTTONUP | 位置の変更を完了し、アップダウン コントロールがマウスをキャプチャした場合にマウス キャプチャを解放します。 バディ ウィンドウが編集コントロールの場合は、編集コントロール内のすべてのテキストが選択されます。 |
| WM_PAINT | アップダウン コントロールを描画します。 wParam パラメーターが NULL 以外の場合、コントロールは値が HDC であると見なし、そのデバイス コンテキストを使用して描画します。 |
| WM_TIMER | マウスがボタンの上に押され、十分な間隔が経過している場合は、現在の位置を変更します。 |