0

作成中の MFC アプリケーションがあります。このアプリケーションには、2 つのツールバーに対応する 2 つのメニュー オプションがあります。メニュー オプションは、ツールバーの表示を切り替えます。ツールバーが現在表示されているかどうかを確認するメニュー オプションが必要です。ここに私がこれまでに持っているものがあります:

BEGIN_MESSAGE_MAP(CLevelPackEditApp, CWinAppEx)
    // Standard file based document commands
    ON_UPDATE_COMMAND_UI(ID_LEVEL_PROPERTIES, &CLevelPackEditApp::OnViewLevelProperties)
END_MESSAGE_MAP()

void CLevelPackEditApp::OnViewLevelProperties(CCmdUI* pCmdUI)
{
    // Get a handle to the main window
    CMainFrame* main = ((CMainFrame*)m_pMainWnd);

    // Get a handle to the level properties toolbar for the main window
    CLevelProperties* obj = main->GetLevelProperties();

    if (obj->IsWindowVisible())
    {
        pCmdUI->SetCheck(0);
        obj->ShowPane(false, false, false);
    } else {
        pCmdUI->SetCheck();
        obj->ShowPane(true, false, true);
    }
}

それは動作します....一種の。チェックされているものとチェックされていないものを切り替えますが、1秒間に複数回切り替えます-メニュー項目をチェックするとメニューが更新されると思われるため、チェックされていないため、更新されているため、チェックされている、aaaannnd繰り返し。どうすればこれを回避できますか?

4

1 に答える 1

2

このON_UPDATE_COMMAND_UI()関数は、チェック マークの設定/クリアのみを行う必要があります。obj->ShowPane()ボタンがクリックされたときだけ呼び出す:

BEGIN_MESSAGE_MAP(CLevelPackEditApp, CWinAppEx)
    // Standard file based document commands
    ON_COMMAND_UI(ID_LEVEL_PROPERTIES, &CLevelPackEditApp::OnViewLevelProperties)
    ON_UPDATE_COMMAND_UI(ID_LEVEL_PROPERTIES, &CLevelPackEditApp::OnUpdateViewLevelProperties)
END_MESSAGE_MAP()

void CLevelPackEditApp::OnViewLevelProperties()
{
    // Get a handle to the main window
    CMainFrame* main = ((CMainFrame*)m_pMainWnd);

    // Get a handle to the level properties toolbar for the main window
    CLevelProperties* obj = main->GetLevelProperties();

    if (obj->IsWindowVisible())
        obj->ShowPane(false, false, false);
    else
        obj->ShowPane(true, false, true);
}

void CLevelPackEditApp::OnUpdateViewLevelProperties(CCmdUI* pCmdUI)
{
    // Get a handle to the main window
    CMainFrame* main = ((CMainFrame*)m_pMainWnd);

    // Get a handle to the level properties toolbar for the main window
    CLevelProperties* obj = main->GetLevelProperties();

    pCmdUI->SetCheck(obj->IsWindowVisible());
}
于 2013-06-20T07:17:29.127 に答える