月間予定表コントロールの日付状態の設定
月間予定表コントロールの属性の 1 つとして、その月の各日に関する情報 (コントロールの日付状態とも呼ばれます) を格納する機能があります。 この情報は、現在表示されている月の特定の日付を強調するために使用されます。
Note
日付状態の情報を表示するには、CMonthCalCtrl
オブジェクトに MCS_DAYSTATE スタイルが設定されている必要があります。
日付状態の情報は、32 ビットのデータ型 MONTHDAYSTATE で表されます。 MONTHDAYSTATE ビット フィールドの各ビット (1 から 31) は、1 か月の日付の状態を表します。 ビットがオンの場合は、対応する日が太字で表示されます。オフの場合は、表示される際に何も強調されません。
月間予定表コントロールの日付状態を設定するには、明示的に CMonthCalCtrl::SetDayState を呼び出す方法と MCN_GETDAYSTATE 通知メッセージを処理する方法の 2 つがあります。
MCN_GETDAYSTATE 通知メッセージの処理
MCN_GETDAYSTATE メッセージは、表示される月の日付をどのように表示するかを決定するためにコントロールによって送信されます。
Note
このコントロールは、表示されている月の前月と翌月をキャッシュするため、新しい月を選択するたびにこの通知を受け取ることになります。
このメッセージを適切に処理するには、日付状態の情報を要求する月数を決定し、MONTHDAYSTATE 構造体の配列を適切な値で初期化して、関連する構造体のメンバーを新しい情報で初期化する必要があります。 次の手順では、必要な手順について詳しく説明します。この手順では、m_monthcal という CMonthCalCtrl
オブジェクトと、MONTHDAYSTATE オブジェクトの配列 mdState があることを前提としています。
MCN_GETDAYSTATE 通知メッセージを処理するには
クラス ウィザードを使用して、MCN_GETDAYSTATE メッセージの通知ハンドラーを m_monthcal オブジェクトに追加します (「関数へのメッセージの割り当て」を参照)。
ハンドラーの本体に次のコードを追加します。
LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR); int iMax = pDayState->cDayState; for (int i = 0; i < iMax; i++) { pDayState->prgDayState[i] = (MONTHDAYSTATE)0; // init to 0 pDayState->prgDayState[i] |= 0x01 << 14; // set 15th bit to 1 }
この例では、pNMHDR ポインターを適切な型に変換した後、情報を要求する月数を決定します (
pDayState->cDayState
)。 月ごとに、現在のビットフィールド (pDayState->prgDayState[i]
) が 0 に初期化され、その後、必要な日付が設定されます (この場合は毎月 15 日)。