|
月間予定表コントロールの基本
今回は月間予定表コントロール(Month Calendar Control)を実装します。月間予定表コントロールは、ユーザが日付をカレンダーから選択して入力できるコントロールです。

まず、リソースエディタで月間予定表コントロールを追加しましょう。今回は月間予定表コントロールとエディットボックスを追加しました。ユーザが日付を選択したら、選択された日付をエディットボックスに表示するようにします。

次に月間予定表コントロールのプロパティを設定します。ここではリソースIDだけ設定します。他はデフォルトでOKです。
次は日付を保持する変数を作ります。これはDDXのvalue変数を使うと簡単に実装できます。月間予定表コントロールを右クリックし、「変数の追加」を選択します。

アクセスはprivate、「コントロール変数」をチェックし、カテゴリにvalueを選択します。変数のデータ型はいくつか選べますが、MFCで日時を扱うときに標準的に使われるCTime型をここでは選択します。

変数名はメンバ変数となるのでm_で始まる名前にしましょう。さらにDDXのvalue変数であることがわかるようにm_xvで始まる名前にすると分かりやすくなります。この辺は好みで決めましょう。
エディットボックスにもDDX変数を追加します。(エディットボックスの使い方は、「エディットボックスの基本」等を見てください。)
次は、ユーザが日付を選択したときのイベントハンドラを追加しましょう。月間予定表コントロールを右クリックし、「イベントハンドラの追加」を選択します。

「メッセージの種類」で「MCN_SELECT」を選択します。

次はコードを実装していきます。まずは、初期状態で今日の日付が選択されているようにします。OnInitDialog()で次のようにします。
BOOL CMonthCalDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
{
m_xvMonthCal = CTime::GetCurrentTime();
UpdateData(FALSE);
}
return TRUE;
} |
CTime::GetCurrentTime()で現在の日時を取得してDDX変数にセットします。その後、UpdateData(FALSE)関数で表示を更新します。
次は、ユーザが日付を選択したときのイベントハンドラです。
// 月間予定表選択変更
void CMonthCalDlg::OnMcnSelectMonthcalendar(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);
UpdateData();
m_xvEditDate = m_xvMonthCal.Format("%Y/%m/%d");
UpdateData(FALSE);
*pResult = 0;
} |
UpdateData()関数で、DDX変数を更新します。その後、CTime::Format()関数で日付の文字列を作成し、エディットボックスのDDX変数にセットします。最後にUpdateData(FALSE)関数で表示を更新します。
では、ビルドして実行してみましょう。月間予定表から日付を選択すると、エディットボックスに選択した日付が表示されます。

|