アップダウン コントロールについて
アップダウン コントロールは、スクロール位置やコンパニオン コントロールに表示される数値 (バディ ウィンドウと呼ばれます) などの値をインクリメントまたはデクリメントするためにユーザーがクリックできる矢印ボタンのペアです。
ユーザーの場合、アップダウン コントロールとそのバディ ウィンドウは、多くの場合、1 つのコントロールのように見えます。 アップダウン コントロールが自動的にバディ ウィンドウの横に配置され、バディ ウィンドウのキャプションが現在の位置に自動的に設定されるように指定できます。 たとえば、アップダウン コントロールと編集コントロールを使用して、ユーザーに数値の入力を求めることができます。 次の図は、編集コントロールをバディ ウィンドウとして持つアップダウン コントロールを示しています。この組み合わせは、スピナー コントロールと呼ばれることもあります。
このセクションでは、次のトピックについて説明します。
アップダウン コントロール スタイル
ウィンドウ スタイルを使用すると、バディ ウィンドウに対する相対的な位置付け方法、バディ ウィンドウのテキストを設定するかどうか、↑キーと ↓キーを処理するかどうかなど、アップダウン コントロールの特性を操作できます。
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 メッセージを使用します。
既定のアップダウン コントロールのメッセージ処理
このセクションでは、アップダウン コントロールによって処理される標準の Windows メッセージについて説明します。
メッセージ | 処理の実行 |
---|---|
WM_CREATE | プライベート データ構造を割り当てて初期化し、そのアドレスをウィンドウ データとして保存します。 |
WM_DESTROY | WM_CREATE 処理中に割り当てられたデータを解放します。 |
WM_ENABLE | ウィンドウを無効にします。 |
WM_KEYDOWN | 上方向キーまたは下方向キーの場合の現在位置を変更します。 |
WM_KEYUP | 位置の変更を完了します。 |
WM_LBUTTONDOWN | マウスをキャプチャします。 バディ ウィンドウが編集コントロールまたはリスト ボックスの場合は、バディ ウィンドウにフォーカスが設定されます。 マウスが上ボタンまたは下ボタンの上にある場合は、位置の変更が開始され、タイマーが設定されます。 |
WM_LBUTTONUP | 位置の変更を完了し、アップダウン コントロールがマウスをキャプチャしら、マウス キャプチャを解放します。 バディ ウィンドウが編集コントロールの場合は、編集コントロール内のすべてのテキストが選択されます。 |
WM_PAINT | アップダウン コントロールをペイントします。 wParam パラメーターが NULL 以外の場合、コントロールは値が HDC であることを前提とし、そのデバイス コンテキストを使用して描画します。 |
WM_TIMER | マウスがボタンの上に押され、十分な間隔が経過した場合に、現在の位置を変更します。 |