日付状態を設定する方法
このトピックでは、日付の状態情報を設定する方法について説明します。 月カレンダー コントロールは、日付の状態情報を使用して、コントロール内の特定の日付を描画する方法を決定します。
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 を処理します。 NMDAYSTATE の cDayState メンバーは、その配列に必要な 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;
関連トピック