月間予定表コントロールの日付状態の設定
月間予定表コントロールの属性の 1 つが月の日付のコントロールの日の状態と呼ばれる情報を保存する機能です。この情報は、現在表示されている月の特定の日付を強調するために使用されます。
[!メモ]
CMonthCalCtrl のオブジェクトは、日の状態情報を表示 MCS_DAYSTATE のフォームが必要です。
日の状態情報は、 32 ビット データ型、 MONTHDAYSTATEとして表現されます。MONTHDAYSTATE のビット フィールド (1 ~ 31)の各ビットは、二つの月の日の状態を表します。ビットがオンの場合は、対応する日は太字で表示; それ以外の場合は文字なしで表示されます。
月間予定表コントロールの日の状態を設定するには、次の 2 とおりの方法があります: 明示的に CMonthCalCtrl::SetDayState へまたは MCN_GETDAYSTATE の通知メッセージを処理することによって呼び出しで。
MCN_GETDAYSTATE の通知メッセージの処理
MCN_GETDAYSTATE のメッセージは、コントロールによって表示される表示する月の日付がどのように表示するかを判断するために送信されます。
[!メモ]
コントロールが前とキャッシュするため、新しい月が選択されるたびに従って、月の表示月には、この通知を受け取ります。
適切にこのメッセージを処理するために、初期化し、適切な値の MONTHDAYSTATE の構造体の配列を初期化します新しい情報で関連の構造体メンバーを何か月日の状態情報がの間要求されるかを確認します。必要な手順を詳しく説明した次の手順では、 MONTHDAYSTATE のオブジェクトの m_monthcal と配列という CMonthCalCtrl のオブジェクトがあると mdState前提としています。
MCN_GETDAYSTATE の通知メッセージを処理するには
[プロパティ] ウィンドウを使用して、 m_monthcal のオブジェクトに MCN_GETDAYSTATE のメッセージの通知ハンドラーを追加します ( 関数への割り当てのメッセージを参照してください)。
ハンドラーの本体で、次のコードを追加します:
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](USB)はゼロに初期化され、次に必要な日付 (この場合、毎月の 15 番目の)に設定されます。