日付と時刻の選択コントロールについて
日付と時刻の選択 (DTP) コントロールは、ユーザーと日付と時刻の情報を交換するためのシンプルで直感的なインターフェイスを提供します。 たとえば、DTP コントロールを使用すると、ユーザーに日付を入力し、選択内容を簡単に取得するように求めることができます。
検討されているトピックは、次のとおりです。
注意
Windowsでは、1601 より前の日付はサポートされていません。 詳細については、 FILETIME 構造体を参照してください。
このコントロールは、1753 年に導入されたグレゴリオ暦に基づいています。 ユリウス暦と一致する日付は計算されません。
日付と時刻の選択ユーザー インターフェイス
日付と時刻の選択 (DTP) コントロールのクライアント領域には、日付または時刻の情報またはその両方が表示され、ユーザーが情報を変更するインターフェイスとして機能します。 日付は、カレンダーから選択することも、アップダウン コントロールを使用して選択することもできます。時刻は、コントロールの 書式指定文字列で定義されているフィールドを入力することで変更できます。 必要に応じて、コントロールにチェック ボックスが表示されます。 このチェック ボックスをオンにすると、コントロール内の値を取得できます。それ以外の場合、コントロールは初期化されていないと見なされます。
次の図は、3 つの日付選択コントロールを含むウィンドウを示しています。 1 つ目の日付選択コントロールは 、DTS_SHOWNONE スタイル、2 つ目は DTS_UPDOWN スタイル、3 つ目は特別なスタイルを使用して作成されました。 3 番目のコントロールでは、ユーザーが下矢印をクリックして予定表を表示します。

次の図は、時刻を含む 3 つのコントロールを持つウィンドウを示しています。
1 つ目のコントロールは 、DTS_TIMEFORMAT スタイルで作成され、4 つのフィールドで構成される既定の時刻に時刻が表示されます。 ユーザーは、これらのフィールドのいずれかに有効な値を入力するか、フィールドを選択し、上方向キーまたは方向キーを使用して値を変更できます。
2 つ目のコントロールは、 DateTime_SetFormatを使用して設定されたカスタム形式を示しています。 最初のコントロールと同様に、ユーザーは時間フィールドを入力するか、方向キーを使用して変更できます。 曜日は、ユーザーが下矢印をクリックしたときに開くカレンダーから日付を選択することで変更できます。
3 番目のコントロールは、コントロールに任意のテキストを追加する方法を示しています。 ユーザーは、入力、方向キー、またはアップダウン コントロールを使用して、1 時間 (1 から 24) を選択できます。

DTP コントロールは、ユーザーの入力に基づいて内部情報を自動的に更新します。 コントロールは、有効な入力として次を認識します。
| 入力カテゴリ | 説明 |
|---|---|
| 方向キー | コントロールは、方向キーを受け取ってコントロール内のフィールドを移動し、値を変更します。 ユーザーは、コントロール内を移動するキーを押すことができます。ユーザーが特定の方向の最後のフィールドを越えて移動しようとすると、キーボード フォーカスがコントロールの反対側のフィールドに "折り返されます"。 キーとキーは、現在のフィールドの値を段階的に変更します。 |
| End and Home | コントロールは、VK_ENDとVK_HOME仮想キーを受け取り、現在のフィールド内の値をそれぞれ上限と下限に変更します。 |
| 関数キー | キーによって編集モードがアクティブになります。 このキーを押すと、コントロールにドロップダウン月のカレンダー コントロールが表示されます (この操作も押します)。 |
| 数値 | コントロールは、2 文字のセグメントで数値入力を受け入れます。 ユーザーが入力した値が無効な場合 (月を 14 に設定する場合など)、コントロールはそれを拒否し、表示を前の値にリセットします。 |
| プラスとマイナス | コントロールは、VK_ADDを受け入れ、テンキーから仮想キーをVK_SUBTRACTして、現在のフィールドの値をインクリメントおよびデクリメントします。 |
DTS_UPDOWN スタイルを使用しない DTP コントロールには、矢印ボタンが表示されます。 ユーザーがこのボタンをクリックすると、月の予定表コントロールがドロップダウンされます。 ユーザーは、予定表の領域をクリックして特定の日付を選択できます。
日付と時刻の選択コントロールのスタイルと形式
日付と時刻の選択 (DTP) コントロールには、コントロールの外観と動作を決定するいくつかの 日付と時刻の選択コントロール スタイル があります。 CreateWindowEx の dwStyle パラメーターを使用してコントロールを作成するときにスタイルを指定します。 コントロールを作成した後でウィンドウ スタイルを取得または変更するには、 GetWindowLong と SetWindowLong を使用します。
プリセット形式
日付の表示には 3 つのプリセット形式があり、1 つは時刻を表示するために使用できます。 次のいずれかのウィンドウ スタイルを選択して、これらの形式を設定します。
| Format | 説明 |
|---|---|
| DTS_LONGDATEFORMAT | ディスプレイは "1996 年 4 月 19 日金曜日" のようになります。 |
| DTS_SHORTDATEFORMAT | 表示は "4/19/96" のようになります。 |
| DTS_SHORTDATECENTURYFORMAT | バージョン 5.80。 表示は "4/19/1996" のようになります。 |
| DTS_TIMEFORMAT | 表示は"5:31:42 PM" のようになります。 |
カスタム形式
DTP コントロールは、書式指定文字列を使用して、情報のフィールドを表示する方法を決定します。 プリセット形式で十分でない場合は、独自の書式指定文字列を定義してカスタム書式を作成できます。 カスタム形式により、アプリケーションの柔軟性が向上します。 コントロールで情報フィールドを表示する順序を指定できます。 本文テキストとコールバック フィールドを含めて、ユーザーに情報を要求できます。 文字列が作成されたら、 DTM_SETFORMAT メッセージを 使用して DTP コントロールに割り当てます。
書式指定文字列
DTP 書式指定文字列は、特定の情報を表し、その表示形式を定義する一連の要素で構成されます。 要素は、書式指定文字列に表示される順序で表示されます。
日付と時刻の書式要素は、実際の日時に置き換えられます。 これらは、次の文字グループによって定義されます。
| 要素 | 説明 |
|---|---|
| "d" | 1 桁または 2 桁の日。 |
| "dd" | 2 桁の日。 1 桁の日の値の前に 0 が付きます。 |
| "ddd" | 3 文字の曜日の省略形。 |
| "dddd" | 完全な曜日名。 |
| "h" | 12 時間形式の 1 桁または 2 桁の時間。 |
| "hh" | 12 時間形式の 2 桁の時間。 1 桁の値の前に 0 が付けられます。 |
| "H" | 24 時間形式の 1 桁または 2 桁の時間。 |
| "HH" | 24 時間形式の 2 桁の時間。 1 桁の値の前に 0 が付けられます。 |
| "m" | 1 桁または 2 桁の分。 |
| "mm" | 2 桁の分。 1 桁の値の前に 0 が付けられます。 |
| "M" | 1 桁または 2 桁の月番号。 |
| "MM" | 2 桁の月番号。 1 桁の値の前に 0 が付けられます。 |
| "MMM" | 3 文字の月の省略形。 |
| "MMMM" | 完全な月名。 |
| "t" | 1 文字の AM/PM 省略形 (つまり、AM は "A" として表示されます)。 |
| "tt" | 2 文字の AM/PM 省略形 (つまり、AM は "AM" として表示されます)。 |
| "yy" | 年の最後の 2 桁 (つまり、1996 は "96" として表示されます)。 |
| "yyyy" | 通年 (つまり、1996 年は "1996" と表示されます)。 |
情報を読みやすくするために、書式指定文字列に本文テキストを単一引用符で囲んで追加できます。 スペースと句読点は引用符で囲む必要はありません。
注意
単一引用符で区切られない形式以外の文字は、DTP コントロールによって予期しない表示になります。
たとえば、""Today is: 04:22:31 Tuesday Mar 23, 1996" という形式で現在の日付を表示するには、書式指定文字列は "'Today is: 'hh':'m':'s dddd MMM dd', 'yyyy" です。 本文に単一引用符を含めるには、2 つの連続する単一引用符を使用します。 たとえば、"'t forget' MMM dd',' yyyy" は次のような出力を生成します。1996 年 3 月 23 日を忘れないでください。 コンマで引用符を使用する必要はないので、"'t forget' MMM dd, yyyy" も有効であり、同じ出力が生成されます。
コールバック フィールド
標準の 書式指定文字列 と本文テキストに加えて、表示の特定の部分を コールバック フィールドとして定義することもできます。 これらのフィールドを使用して、ユーザーに情報のクエリを実行できます。 コールバック フィールドを宣言するには、書式指定文字列の任意の場所に 1 つ以上の "X" 文字 (ASCII コード 88) を含めます。 "X" 文字を繰り返すことで、一意の ID を持つコールバック フィールドを作成できます。 したがって、書式指定文字列 "XX dddd MMM dd'、'yyy XXX" には、"XX" と "XXX" という 2 つの一意のコールバック フィールドが含まれます。 他の DTP 制御フィールドと同様に、コールバック フィールドは書式指定文字列内の位置に基づいて左から右の順序で表示されます。
DTP コントロールは、書式指定文字列を解析し、コールバック フィールドを検出すると、 DTN_FORMAT および DTN_FORMATQUERY 通知コードを送信します。 コールバック フィールドに対応する書式指定文字列要素は、受信アプリケーションがクエリ対象のコールバック フィールドを特定できるようにするための通知に含まれています。 コントロールの所有者は、カスタム情報が正しく表示されるように、これらの通知に応答する必要があります。
日付と時刻の選択コントロールの通知メッセージ
日付と時刻の選択 (DTP) コントロールは、ユーザーの入力またはプロセスを受信し、コールバック フィールドに対応するときに通知コードを送信します。 コントロールの親は、メッセージの形式でこれらの通知コード WM_NOTIFY 受け取ります。
DTP コントロールでは、次の通知コードが使用されます。
| 通知コード | 説明 |
|---|---|
| DTN_CLOSEUP | ドロップダウン月の予定表が削除されようとしていることを示します。 |
| DTN_DATETIMECHANGE | DTP コントロール内の変更を通知します。 |
| DTN_DROPDOWN | ドロップダウン月の予定表が表示されようとしていることを示します。 |
| DTN_FORMAT | コールバック フィールドとして記述された書式指定文字列の一部に表示するテキストを要求します。 |
| DTN_FORMATQUERY | コールバック フィールドに表示するテキストの最大許容サイズに関する情報を要求します。 |
| DTN_USERSTRING | コントロール内のユーザーの編集操作の終了を通知します。 この通知は、 DTS_APPCANPARSE スタイルを使用する DTP コントロールによってのみ送信されます。 |
| DTN_WMKEYDOWN | ユーザーが DTP コントロールのコールバック フィールドでキーを押したことを通知します。 |
関連トピック