Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Menu MFC-选中/取消选中菜单项_Menu_Mfc - Fatal编程技术网

Menu MFC-选中/取消选中菜单项

Menu MFC-选中/取消选中菜单项,menu,mfc,Menu,Mfc,我正在制作一个MFC应用程序,其中有两个对应于两个工具栏的菜单选项-菜单选项切换工具栏的可见性。如果工具栏当前可见,我需要检查菜单选项。以下是到目前为止我得到的信息: BEGIN_MESSAGE_MAP(CLevelPackEditApp, CWinAppEx) // Standard file based document commands ON_UPDATE_COMMAND_UI(ID_LEVEL_PROPERTIES, &CLevelPackEditApp::OnV

我正在制作一个MFC应用程序,其中有两个对应于两个工具栏的菜单选项-菜单选项切换工具栏的可见性。如果工具栏当前可见,我需要检查菜单选项。以下是到目前为止我得到的信息:

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);
    }
}

它起作用了……有点。它会在选中和未选中之间切换,但每秒会切换多次-我怀疑选中菜单项会导致菜单更新,因此它未选中,因此它会更新,因此它会选中,aa然后重复。我该如何解决这个问题?

更新命令上的
命令\u 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());
}

我把它放在代码中,但出于某种原因,从来没有调用过OnUpdateLevel属性。