日付と時刻の選択コントロールについて
日付と時刻の選択 (DTP) コントロールは、日付と時刻の情報をユーザーとやり取りするための、シンプルで直感的なインターフェイスです。 たとえば、DTP コントロールを使用すると、ユーザーに日付の入力を求め、その選択を簡単に取得することができます。
検討されているトピックは、次のとおりです。
Note
Windows では、1601 年より前の日付はサポートされていません。 詳細については、FILETIME 構造体を参照してください。
このコントロールは、1753 年に導入されたグレゴリオ暦に基づいています。 ユリウス暦の日付は計算されません。
日付と時刻の選択のユーザー インターフェイス
日付と時刻の選択 (DTP) コントロールのクライアント領域には、日付または時刻の情報、またはその両方が表示され、ユーザーが情報を変更するためのインターフェイスとして機能します。 日付は、カレンダーから選択するか、アップダウン コントロールを使用して選択できます。時刻は、コントロールの書式設定文字列によって定義されるフィールドに入力することで、変更できます。 必要に応じて、コントロールにチェック ボックスが表示されます。 チェック ボックスがオンの場合、コントロール内の値を取得できます。そうでない場合、コントロールは初期化されていないと見なされます。
次の図は、3 つの日付選択コントロールを含むウィンドウを示しています。 1 つ目の日付選択コントロールは、DTS_SHOWNONE スタイルが設定されて作成されたものです。2 つ目は DTS_UPDOWN スタイルが設定され、3 つ目には特定のスタイルは設定されていません。 3 つ目のコントロールでは、ユーザーが下矢印をクリックしたことでカレンダーが表示されています。
次の図は、時刻を含む 3 つのコントロールを持つウィンドウを示しています。
1 つ目のコントロールは、DTS_TIMEFORMAT スタイルが設定されて作成されたもので、4 つのフィールドで構成される既定時刻で時刻が表示されています。 ユーザーは、これらのフィールドに有効な値を入力するか、フィールドを選択してからアップダウン コントロールまたは方向キーを使用して値を変更できます。
2 つ目のコントロールには、DateTime_SetFormat を使用して設定されたカスタム形式が表示されています。 1 つ目のコントロールと同様に、ユーザーは入力するか方向キーを使用することで、時間フィールドを変更できます。 ユーザーが下矢印をクリックしたときに開くカレンダーから日付を選択することで、曜日を変更できます。
3 つ目のコントロールは、コントロールに任意のテキストを追加する方法を示しています。 ユーザーは、入力するか、方向キーを使用するか、またはアップダウン コントロールを使用して、時間 (1 から 24) を選択できます。
DTP コントロールは、ユーザーの入力に基づいて内部情報を自動的に更新します。 コントロールは、以下のものを有効な入力として認識します。
入力カテゴリ | 説明 |
---|---|
方向キー | コントロールは、方向キーを受け取ると、コントロール内のフィールドを移動して値を変更します。 ユーザーは、Or キーを押すことでコントロール内を移動できます。ユーザーが特定方向で最後のフィールドを通過しようとすると、キーボードのフォーカスがコントロールの反対側のフィールドに戻されます。 And キーを使用すると、現在のフィールドの値を増加させます。 |
End キーと Home キー | コントロールは、VK_END 仮想キーと VK_HOME 仮想キーを受け取ると、現在のフィールド内の値をそれぞれ上限と下限に変更します。 |
関数キー | このキーによって編集モードがアクティブになります。 このキーを使用すると、コントロールにドロップダウンの 1 か月カレンダー コントロールが表示されます (押した場合も同様です)。 |
数値 | このコントロールは、2 文字のセグメントで数値入力を受け付けます。 ユーザーが入力した値が無効な場合 (月を 14 に設定するなど)、コントロールはそれを拒否し、表示を元の値にリセットします。 |
プラス キーとマイナス キー | コントロールは、テンキーから VK_ADD 仮想キーと VK_SUBTRACT 仮想キーを受け取り、現在のフィールドの値を増加または減少させます。 |
DTS_UPDOWN スタイルが使用されていない DTP コントロールでは、矢印ボタンが表示されます。 ユーザーがこのボタンをクリックすると、1 か月カレンダー コントロールがドロップダウンします。 ユーザーは、カレンダーの領域をクリックして特定の日付を選択できます。
日付と時刻の選択コントロールのスタイルと形式
日付と時刻の選択 (DTP) コントロールでは、コントロールの外観と動作を決定する日付と時刻の選択コントロールのスタイルがいくつか用意されています。 コントロールを作成するときに、CreateWindowEx の dwStyle パラメーターを使用してスタイルを指定します。 コントロールの作成後にウィンドウ スタイルを取得または変更するには、GetWindowLong と SetWindowLong を使用します。
プリセット形式
日付の表示に使用できるプリセット形式は 3 つあり、時刻の表示に使用できるプリセット形式は 1 つあります。 以下のいずれかのウィンドウ スタイルを選択して、これらの形式を設定します。
書式 | 説明 |
---|---|
DTS_LONGDATEFORMAT | 表示は次のようになります。"Friday, April 19, 1996"。 |
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" と表示されます)。 |
情報を読みやすくするために、本文テキストを単一引用符で囲んで書式設定文字列に追加できます。 スペースと句読点を引用符で囲む必要はありません。
Note
一重引用符で区切られていない書式設定のない文字は、DTP コントロールで予期しない表示になります。
たとえば、現在の日付を "'Today is: 04:22:31 Tuesday Mar 23, 1996" という形式で表示するには、書式設定文字列は "'Today is: 'hh':'m':'s dddd MMM dd', 'yyyy" となります。 本文テキストに単一引用符を含めるには、一重引用符を 2 つ連続して使用します。 たとえば、"'Don't forget' MMM dd',' yyyy" と記述すると、"Do not forget Mar 23, 1996" のように表示されます。 カンマについては引用符を使用する必要はないため、"'Don't forget' MMM dd, yyyy" も有効であり、同じ出力が生成されます。
コールバック フィールド
標準の書式設定文字列と本文テキストに加えて、表示の特定の部分をコールバック フィールドとして定義することもできます。 これらのフィールドは、ユーザーに情報を求めるクエリを実行するのに使用できます。 コールバック フィールドを宣言するには、書式設定文字列の任意の場所に 1 つ以上の "X" 文字 (ASCIIコード88) を含めます。 "X" 文字を繰り返すことで、一意の識別子を持つコールバック フィールドを作成できます。 したがって、書式設定文字列 "XX dddd MMM dd', 'yyy XXX" には、"XX" と "XXX" の 2 つの一意のコールバック フィールドが含まれます。 他の DTP コントロール フィールドと同様に、コールバック フィールドは、書式設定文字列内での位置に基づいて、左から右の順序で表示されます。
DTP コントロールは、書式設定文字列の解析中にコールバック フィールドを検出すると、DTN_FORMAT 通知コードと DTN_FORMATQUERY 通知コードを送信します。 受信したアプリケーションがクエリ対象のコールバック フィールドを判別できるように、コールバック フィールドに対応する書式設定文字列の要素がこれらの通知に含まれます。 コントロールの所有者は、カスタム情報が正しく表示されるように、これらの通知に応答する必要があります。
日付と時刻の選択コントロールの通知メッセージ
日付と時刻の選択 (DTP) コントロールは、ユーザー入力またはプロセスを受信したとき、およびコールバック フィールドに応答したときに、通知コードを送信します。 このコントロールの親は、これらの通知コードを WM_NOTIFY メッセージの形式で受信します。
DTP コントロールでは、以下の通知コードが使用されます。
通知コード | 説明 |
---|---|
DTN_CLOSEUP | ドロップダウンの 1 か月カレンダーを削除しようとしていることを示します。 |
DTN_DATETIMECHANGE | DTP コントロール内での変更を通知します。 |
DTN_DROPDOWN | ドロップダウンの 1 か月カレンダーを表示しようとしていることを示します。 |
DTN_FORMAT | コールバック フィールドとして記述された書式設定文字列の部分に表示するテキストを要求します。 |
DTN_FORMATQUERY | コールバック フィールドに表示するテキストの最大許容サイズに関する情報を要求します。 |
DTN_USERSTRING | コントロール内でのユーザーの編集操作の終了を通知します。 この通知は、DTS_APPCANPARSE スタイルが使用されている DTP コントロールでのみ送信されます。 |
DTN_WMKEYDOWN | DTP コントロールのコールバック フィールドでユーザーがキーを押したことを通知します。 |
関連トピック