月カレンダー コントロールについて
月カレンダー コントロールは、予定表に似たユーザー インターフェイスを実装します。 これにより、ユーザーは非常に直感的でわかりやすい方法で日付を入力または選択できます。 また、このコントロールは、既存のデータ型を使用してコントロールの日付情報を取得および設定する手段をアプリケーションに提供します。
月カレンダー コントロール機能
次のスクリーン ショットは、2 か月を表示するようにサイズ変更された月カレンダー コントロールを示しています。
Note
月カレンダー コントロールの外観と動作は、ランタイム ライブラリのバージョンによって若干異なります。 このトピックでは、バージョン 6 の Comctl32.dll で Windows Vista に表示されるコントロールについて説明します。
この図のコントロールには、次のオプション機能があります。
- 現在の日付は、コントロールの下部にある別の行に表示されます。 これが既定のスタイルです。
- 「本日を示す円 (このバージョンでは四角)」は、現在の日付を囲い、「本日」行の横に表示され、視覚的な注意を引きます。 これが既定のスタイルです。
- 週番号は、日付の各行の左側に表示されます。 このスタイルを指定する必要があります。
- 一部の日付は、アプリケーションによって設定された日付の状態に応じて太字で表示されます。 たとえば、会議がスケジュールされている日付は太字で表示される場合があります。 このスタイルを指定する必要があります。
Note
Windows では、1601 年前の日付はサポートされていません。 詳細については、「FILETIME」を参照してください。
月カレンダー コントロールは、1753 年に導入されたグレゴリオ暦に基づいています。 1753 年より前に使用されていたユリウス暦と一致する日付は計算されません。
日の選択
既定では、ユーザーが月カレンダー コントロールの左上または右上にある矢印ボタンをクリックすると、コントロールは前月または翌月を表示するように表示を更新します。 ユーザーは、最初の月の前と最後の月の後に表示される月の一部をクリックしても、同じアクションを実行することもできます。
次のキーボード コマンドを使用して、選択範囲を移動することもできます。 カレンダーは、選択した日を表示するために必要に応じて常にスクロールします。 (仮想キー コード は、表に表示されます。)
コマンド | 説明 |
---|---|
左矢印 (VK_LEFT) | 前日を選択します。 |
右矢印 (VK_RIGHT) | 翌日を選択します。 |
上矢印 (VK_UP) | 前週の同じ日を選択します。 |
下矢印 (VK_DOWN) | 翌週の同じ日を選択します。 |
ページ アップ (VK_PRIOR) | 前月の同じ日を選択します。 (その月に該当する日付がない場合は、最も近い日が選択されます。たとえば、選択した日付が 3 月 31 日の場合、2 月 28 日または 29 日に移動します)。 |
ページ ダウン (VK_NEXT) | 翌月の同じ日を選択します。 |
Home (VK_HOME) | 当月の最初の日を選択します。 |
End (VK_END) | 当月の最終日を選択します。 |
CTRL + HOME | 1 か月前にスクロールし、左端の列で日付を選択します。 |
CTRL + END | 1 か月後にスクロールし、右端の列で日付を選択します。 |
Ctrl + PageUp | 前月の同じ日を選択します。 選択が移動する月数は、コントロールに表示される月数です。 たとえば、2 か月が表示されている場合、選択肢は 6 月 6 日から 5 月 6 日に移動します。 |
CTRL + PAGE DOWN | 前月の同じ日を選択します。 選択が移動する月数は、コントロールに表示される月数です。 たとえば、2 か月が表示されている場合、選択肢は 6 月 6 日から 8 月 6 日に移動します。 |
月のカレンダー コントロールで MCS_NOTODAY スタイルが使用されている場合、ユーザーは、コントロール下部の [今日] テキストをクリックすると現在の日付に戻ることができます。 現在の日付が表示されていない場合、コントロールは表示を更新して表示します。
アプリケーションは、MCM_SETMONTHDELTA メッセージまたは対応するマクロ MonthCal_SetMonthDelta を使用して、コントロールが更新する月数を変更できます。 ただし、PAGE UP キーと PAGE DOWN キーは、表示される月数や、MCM_SETMONTHDELTA が設定下値に関係に悪、選択した月を 1 つずつ変更します。
前月と翌月以外の月の選択
ユーザーが表示される月の名前をクリックすると、その年のすべての月が一覧表示されます (以前のバージョンでは、これはポップアップ メニューでした)。 ユーザーは、一覧で月を選択できます。 ユーザーの選択肢が表示されない場合、月カレンダー コントロールは表示をスクロールして、選択した月を表示します。 次のスクリーン ショットでは、月カレンダー コントロールに連続する 2 年分の月が表示されます。
別の年の選択
ユーザーが年をクリックすると、年のグループが一覧表示され、次のスクリーン ショットに示すように、別の年を選択できます。
ローカリゼーション
月カレンダー コントロールは、その形式とすべての文字列を LOCALE_USER_DEFAULT から取得します。
月カレンダー コントロールの時間
月カレンダー コントロールには、時刻は表示されません。 ただし、選択した日付または今日の日付を設定および取得するために使用される SYSTEMTIME 構造体には、[時刻] フィールドが含まれています。 日付をプログラムで設定すると、コントロールは [時刻] フィールドをそのままコピーするか、最初に検証してから、無効な場合は現在の既定の時刻を格納します。 次に、日付を設定するメッセージの一覧と、[時刻] フィールドの処理方法について説明します。
メッセージ | 説明 |
---|---|
MCM_SETCURSEL | コントロールは、検証や変更を行わずに、[時刻] フィールドをそのままコピーします。 |
MCM_SETRANGE | 渡された構造体の [時刻] フィールドが検証されます。 有効な場合、[時刻] フィールドは変更なしでコピーされます。 無効な場合、コントロールは今日のデータから [時刻] フィールドをコピーします。 |
MCM_SETSELRANGE | 渡された構造体の [時刻] フィールドが検証されます。 有効な場合、[時刻] フィールドは変更なしでコピーされます。 無効な場合、コントロールは現在の選択範囲の [時刻] フィールドを保持します。 |
MCM_SETTODAY | コントロールは、検証や変更を行わずに、[時刻] フィールドをそのままコピーします。 |
コントロールから日付を取得すると、[時刻] フィールドは変更せずに保存された時刻からコピーされます。 コントロールによる [時刻] フィールドの処理は、プログラマの便宜のために提供されます。 コントロールは、上記以外の操作の結果として、[時刻] フィールドを調べたり変更したりすることはありません。