afx_msg void OnUpdateColorRed(CCmdUI*);ON_UPDATE_COMMAND_UI(ID_RED,&CMainWindow::OnUpdateColorRed)void CMainWindow::OnUpdateColorRed (CCmdUI * p)
{
p->SetText (L"true");
}这是提取的部分代码,点完菜单怎么没设置文本呢

解决方案 »

  1.   

    由于项目中大量的使用Dialog 并且dialog中的子控件在某些条件下要disable 显示。为了更加方便的控制和统一我们的编码。在dialog 中要使用 ON_UPDATE_COMMAND_UI 进行处理,好处是代码简单,容易修改控制 使用方法: 1,重载CDialog 的ContinueModal()虚函数 2,在ContinueModal()中添加代码:UpdateDialogControls(this,true); 3,为一个控件添加ON_UPDATE_COMMAND_UI消息响应函数 afx_msg void OnUpdateButton1(CCmdUI *pCmdUI); 还有宏: ON_UPDATE_COMMAND_UI(IDC_BUTTON1,OnUpdateButton1) 4,在函数OnUpdateButton1(CCmdUI *pCmdUI)中添加处理代码。  在对话框上添加工具条(toolbar)和菜单(menu)实例:在对话框类中添加下面的函数BOOL CMyDlg::ContinueModal()
    {
       if( m_wndtoolbar.IsWindowVisible() )
       {
       CFrameWnd* pParent = ( CFrameWnd* ) m_wndtoolbar.GetParent();
       if( pParent )
          m_wndtoolbar.OnUpdateCmdUI( pParent, ( WPARAM ) TRUE );
       }   CMenu* pMainMenu = GetMenu();
       CCmdUI cmdUI;
       for (UINT n = 0; n < pMainMenu->GetMenuItemCount(); ++n)
        {
            CMenu* pSubMenu = pMainMenu->GetSubMenu(n);
            cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
            for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
            {
                cmdUI.m_nIndex = i;
                cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
                cmdUI.m_pMenu = pSubMenu;
                cmdUI.DoUpdate(this, FALSE);
            }
        }
       return CDialog::ContinueModal();
    }
    然后再对应的.h中添加 BOOL ContinueModal();
    这样就可以使用N_UPDATE_COMMAND_UI了。   另外,有些文章使用WM_KICKIDLE消息。发现cpu的使用率为100%。建议不要使用该函数   另一个缺点:   如果用键盘切换了VIEW,这个函数就不响应了,也就是说,如果使用右键菜单中间如果包括了根据VIEW变化的变量,那么就无法操作。