今回はメニュー処理です。
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnExplanation() {
MessageBox(m_hWnd,
"西暦はローマ歴から始まり、シーザーがエジプト歴による修正を命じた後、何度かの修正を経て、現在のグレゴリオ歴に至りました。\n1752年9月に修正を行った英国では過去の誤差修正(閏年調整)の為に9月2日の後が14日となりました。\n残念ながら、MCコントロールは1753年から9998年までしか表示できません。",
"西暦解説", MB_OK | MB_ICONINFORMATION);
return TRUE;
}
//(解説:これは西暦の解説したね。)
bool CMyWnd::OnVersion() {
MessageBox(m_hWnd, "Calender Ver. 1.0", "バージョン情報",
MB_OK | MB_ICONINFORMATION);
return TRUE;
}
//(解説:定番のバージョン情報です。ダイアログを使わず、メッセージボックスで対応しています。)
bool CMyWnd::OnExit() {
SendMessage(m_hWnd, WM_CLOSE, 0, 0);
return TRUE;
}
//(解説:これも定番の終了処理です。)
bool CMyWnd::OnSpecym() {
specdlg.DoModal(m_hWnd, "IDD_SPEC", specdlgProc);
SBarInfo(FALSE);
return TRUE;
}
//(解説:IDD_SPECダイアログを使った年月特定処理-Specifying year and month-とステータスバーへの情報書き込みです。)
bool CMyWnd::OnWeekno() {
LONG lStyle; //MCコントロールのスタイル変更用変数
lStyle = GetWindowLong(hMC, GWL_STYLE);
//(解説:現行のMCCのスタイルをlStyle変数に取り込みます。)
lStyle |= MCS_WEEKNUMBERS;
//(解説:現行のMCCのスタイルに週数表示スタイルを付加します。)
SetWindowLong(hMC, GWL_STYLE, lStyle);
//(解説:現行のMCCのスタイルを新しいスタイルに変更します。)
ModifyMenu(hMenu, IDM_WEEKNO, IDM_NOWEEKNO, "週数を表示しない(&W)");
SetMCC(hMC);
//(解説:メニューアイテムを書き換えます。)
InvalidateRect(m_hWnd, NULL, TRUE);
//(解説:ウィンドウ表示をリフレッシュします。)
return TRUE;
}
bool CMyWnd::OnNotoday() {
LONG lStyle; //MCコントロールのスタイル変更用変数
lStyle = GetWindowLong(hMC, GWL_STYLE);
//(解説:現行のMCCのスタイルをlStyle変数に取り込みます。)
lStyle |= MCS_NOTODAY;
//(解説:本日表示をしないスタイルを付加します。)
SetWindowLong(hMC, GWL_STYLE, lStyle);
//(解説:新しいスタイルに変更します。)
ModifyMenu(hMenu, IDM_NOTODAY, IDM_TODAY, "今日を表示する(&T)");
SetMCC(hMC);
//(解説:メニューアイテムを書き換えます。)
InvalidateRect(m_hWnd, NULL, TRUE);
//(解説:ウィンドウ表示をリフレッシュします。)
return TRUE;
}
bool CMyWnd::OnNoWeekno() {
LONG lStyle; //MCコントロールのスタイル変更用変数
lStyle = GetWindowLong(hMC, GWL_STYLE);
//(解説:現行のMCCのスタイルをlStyle変数に取り込みます。)
lStyle &= ~MCS_WEEKNUMBERS;
//(解説:週数表示スタイルをXORで除去します。)
SetWindowLong(hMC, GWL_STYLE, lStyle);
//(解説:新しいスタイルに変更します。)
ModifyMenu(hMenu, IDM_NOWEEKNO, IDM_WEEKNO, "週数を表示する(&W)");
SetMCC(hMC);
//(解説:メニューアイテムを書き換えます。)
InvalidateRect(m_hWnd, NULL, TRUE);
//(解説:ウィンドウ表示をリフレッシュします。)
return TRUE;
}
bool CMyWnd::OnToday() {
LONG lStyle; //MCコントロールのスタイル変更用変数
lStyle = GetWindowLong(hMC, GWL_STYLE);
//(解説:現行のMCCのスタイルをlStyle変数に取り込みます。)
lStyle &= ~MCS_NOTODAY;
//(解説:本日表示スタイルをXORで除去します。)
SetWindowLong(hMC, GWL_STYLE, lStyle);
//(解説:新しいスタイルに変更します。)
ModifyMenu(hMenu, IDM_TODAY, IDM_NOTODAY, "今日を表示しない(&T)");
SetMCC(hMC);
//(解説:メニューアイテムを書き換えます。)
InvalidateRect(m_hWnd, NULL, TRUE);
//(解説:ウィンドウ表示をリフレッシュします。)
return TRUE;
}
こうやって見ると西暦の解説の他は、メニュー処理は同様の処理のバリエーションだと分かります。
では具体的にどうやっているのか、は次回で。