次の方法で共有


日付状態を設定する方法

このトピックでは、日付の状態情報を設定する方法について説明します。 月カレンダー コントロールは、日付の状態情報を使用して、コントロール内の特定の日付を描画する方法を決定します。

MCS_DAYSTATE スタイルを使用する月カレンダー コントロールは、日付の状態をサポートします。 日付状態の情報は、32 ビットのデータ型 MONTHDAYSTATE で表されます。 MONTHDAYSTATE ビットフィールド (0から30) の各 ビットは、月の 1 日の状態を指定します。 ビットがオンの場合、対応する日付は太字で表示されます。

知っておくべきこと

テクノロジ

前提条件

  • C/C++
  • Windows ユーザー インターフェイス プログラミング

手順

アプリケーションは、MCM_SETDAYSTATE メッセージを送信するか、対応するマクロ MonthCal_SetDayState を使用して、日付の状態情報を明示的に設定できます。 ただし、通常、日付の状態情報は、MCN_GETDAYSTATE 通知コードに応答して設定されます。これは、たとえば、別の月を表示するためにスクロールされた際に、コントロールを更新する必要があるときに送信されます。

次のコード例は、WM_NOTIFY メッセージ ハンドラーで MCN_GETDAYSTATE 通知コードを処理する方法を示しています。 表示される各月の 1 日と 15 日を強調表示する必要があることを指定して、MCN_GETDAYSTATE を処理します。 NMDAYSTATEcDayState メンバーは、その配列に必要な MONTHDAYSTATE 値のメンバーを指定します。この値には、任意の最大サイズが指定されます。 次にコードは、アプリケーション定義 の BOLDDAY マクロを使用して、配列の有効な各要素に適切なビットを設定するためにループ処理します。

    #define BOLDDAY(ds, iDay)  \
        if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))

    case WM_NOTIFY:
            if (((LPNMHDR)lParam)->code == MCN_GETDAYSTATE)
            {
                MONTHDAYSTATE rgMonths[12] = { 0 };
                int cMonths = ((NMDAYSTATE*)lParam)->cDayState;
                for (int i = 0; i < cMonths; i++)
                {
                    BOLDDAY(rgMonths[i], 1);
                    BOLDDAY(rgMonths[i], 15);
                }
                ((NMDAYSTATE*)lParam)->prgDayState = rgMonths;
                return TRUE;
            }
            break;

月カレンダー コントロール リファレンス

月カレンダー コントロールについて

月カレンダー コントロールの使用