月間予定表コントロールの日付状態の設定
更新 : 2007 年 11 月
月間予定表コントロールの属性の 1 つとして、月の各日付に対する情報を格納する機能があります。この情報は、コントロールの日付状態と呼ばれます。この情報は、現在表示されている一部の日付を強調するのに使用されます。
メモ : |
---|
CMonthCalCtrl オブジェクトは、日付状態の情報を表示するために MCS_DAYSTATE スタイルが指定されている必要があります。 |
日付状態の情報は、32 ビット データ型 MONTHDAYSTATE で表されます。MONTHDAYSTATE ビット フィールド (1 から 31) の各ビットは、その月の日付状態を表します。ビットがオンになっている場合、対応する日付が太字で表示されます。ビットがオフになっている場合は、太字で表示されません。
月間予定表コントロールの日付状態を設定するには、CMonthCalCtrl::SetDayState を明示的に呼び出す方法と MCN_GETDAYSTATE 通知メッセージを処理する方法があります。
MCN_GETDAYSTATE 通知メッセージの処理
MCN_GETDAYSTATE メッセージは、表示中の月の日付の表示方法を特定するためにコントロールによって送信されます。
メモ : |
---|
表示中の月の前月と翌月がコントロールでキャッシュされるので、新しい月が選択されるたびにこの通知を受信することになります。 |
このメッセージを適切に処理するには、日付状態の情報が要求されている月数を特定して、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 日)。