我在UPDATE_COMMAND_UI的映射函数里加入如下代码:
void CCMenuTestDlg::OnUpdateAaBb(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->Enable(FALSE);
}
但只在文档/视图结构的程序才有效,那我该怎么办呢?

解决方案 »

  1.   

    1.GetDlgItem(IDC_XXXX)->EnableWindow(FALSE/TRUE);
    2.(CButton *)(GetDlgItem(IDC_XXX)->SetCheck(0/1);
    第一条是Enable,如果参数为FALSE为Disable如果为TRUE的话为Enable.
    第二条是Check,如果参数为0的话为为选中状态,如果参数为1的话为选中状态.
    其中 IDC_XXX为你的控件ID.
      

  2.   

    http://www.codeguru.com/dialog/ccmduidialog.shtml
    http://www.codeguru.com/dialog/OnUpdate.shtml
    http://www.codeguru.com/dialog/DialogUpdates.shtml
      

  3.   

    在对话框程序的pCmdUI->SetCheck(1)时调用的是CTestCmdUI的SetCheck(),
    这个SetCheck函数是空的,什么也不作。
    而在文档视程序中调用的是CCmdUI的SetCheck()函数。这个函数才能起作用。
      

  4.   

    call the global function:CheckMenuItem()
    void CGameMineDlg::OnUpdateGameSimple(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    ::CheckMenuItem( m_hMainMenu,ID_GAME_HIGH,MF_UNCHECKED);
    ::CheckMenuItem( m_hMainMenu,ID_GAME_CUSTOM,MF_UNCHECKED);
    ::CheckMenuItem( m_hMainMenu,ID_GAME_SIMPLE,MF_CHECKED);
    ::CheckMenuItem( m_hMainMenu,ID_GAME_MIDDLE,MF_UNCHECKED);

    }
      

  5.   

    CGameMineDlg
    {
    private:
    HMENU m_hMainMenu;
    }BOOL CGameMineDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); CMenu MainMenu;
    if(!MainMenu.LoadMenu(IDR_GAME_MENU))
    {
    AfxMessageBox("Can't load main menu!",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
    }
    SetMenu(&MainMenu);
    m_hMainMenu=MainMenu.Detach();
    ....
    }
      

  6.   

    可以在空闲消息中处理:
    WM_KICKIDLE (#include "afxpriv.h")该消息需手动添加CYourDlg::OnKickIdle()
    {
    UpdateDialogControls(AfxGetApp()->m_pMainWnd,true);
    }Good Luck!