次の方法で共有


月間予定表コントロールの日付状態の設定

更新 : 2007 年 11 月

月間予定表コントロールの属性の 1 つとして、月の各日付に対する情報を格納する機能があります。この情報は、コントロールの日付状態と呼ばれます。この情報は、現在表示されている一部の日付を強調するのに使用されます。

h9zxdck8.alert_note(ja-jp,VS.90).gifメモ :

CMonthCalCtrl オブジェクトは、日付状態の情報を表示するために MCS_DAYSTATE スタイルが指定されている必要があります。

日付状態の情報は、32 ビット データ型 MONTHDAYSTATE で表されます。MONTHDAYSTATE ビット フィールド (1 から 31) の各ビットは、その月の日付状態を表します。ビットがオンになっている場合、対応する日付が太字で表示されます。ビットがオフになっている場合は、太字で表示されません。

月間予定表コントロールの日付状態を設定するには、CMonthCalCtrl::SetDayState を明示的に呼び出す方法と MCN_GETDAYSTATE 通知メッセージを処理する方法があります。

MCN_GETDAYSTATE 通知メッセージの処理

MCN_GETDAYSTATE メッセージは、表示中の月の日付の表示方法を特定するためにコントロールによって送信されます。

h9zxdck8.alert_note(ja-jp,VS.90).gifメモ :

表示中の月の前月と翌月がコントロールでキャッシュされるので、新しい月が選択されるたびにこの通知を受信することになります。

このメッセージを適切に処理するには、日付状態の情報が要求されている月数を特定して、MONTHDAYSTATE 構造体の配列を適切な値で初期化し、該当する構造体メンバを新しい情報で初期化する必要があります。詳細な手順を次に示します。ここでは、m_monthcal と呼ばれる CMonthCalCtrl オブジェクトと MONTHDAYSTATE オブジェクトの配列 mdState があるものとします。

MCN_GETDAYSTATE 通知メッセージを処理するには

  1. プロパティ ウィンドウで、MCN_GETDAYSTATE メッセージの通知ハンドラを m_monthcal オブジェクトに追加します。「関数へのメッセージの割り当て」を参照してください。

  2. ハンドラの本体に、次のコードを追加します。

    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 日)。

参照

概念

コントロール (MFC)

参照

CMonthCalCtrl の使い方