今回はメニュー処理です。

 

/////////////////////////////////
//主ウィンドウ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;
}

 

こうやって見ると西暦の解説の他は、メニュー処理は同様の処理のバリエーションだと分かります。

では具体的にどうやっているのか、は次回で。