对话框的三个一般菜单,随时有且只能有一个被选中(打勾),并可以点取进行切换,
如何实现.
应该挺简单,但花了我挺长时间了
代码说明,最好有例子

解决方案 »

  1.   

    响应UPDATE_COMMAND_UI
    用pCmdUI->SetCheck(1);就可以打上勾了
      

  2.   

    不过在对话框中,你要自己在空闲事后处理菜单自绘消息在OnKickIdle中添加如下语句UpdateDialogControls(this, FALSE); CMenu* pMainMenu = GetMenu();
        CCmdUI cmdUI;
        // update menu enable/disable state
        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 Default();
      

  3.   

    TO stevecrisewu(月亮骑士) OnKickIdle 是什么,如何添加?
      

  4.   

    楼主的意思是不是用radio方式?
    可以用函数CheckRadioMenuItem。
    不过需要设置若干个menuitem为radio类型(MFT_RADIOCHECK)可以用
    SetMenuItemInfo
      

  5.   

    bool bMemu1 = TRUE , bMemu2 = FALSE, bMenu3 = FALSE;
    用三个变量控制菜单是否打勾
    在每个菜单的UPDATE_COMMAND_UI消息相应函数中
    用pCmdUI->SetCheck(bMenu*);控制在每个菜单的单机消息中,修改控制变量bMenu1,bMenu2, bMenu3的值
      

  6.   

    实际上我用过pCmdUI->SetCheck(1)的方式,
    但是在对话框中好象不起作用,点了后了不
    打勾.
    谁知道如何解决?可能是stevecrisewu(月亮骑士) 说的那样,但不知道
    OnKickIdle是什么
    .........
    不过在对话框中,你要自己在空闲事后处理菜单自绘消息在OnKickIdle中添加如下语句UpdateDialogControls(this, FALSE);..........
      

  7.   

    在头文件中加入LRESULT OnKickIdle(WPARAM wParam, LPARAM lParam);申明然后在cpp文件中添加映射ON_MESSAGE(WM_KICKIDLE, OnKickIdle)就好了就是空闲事后让绘制菜单WM_KICKIDLE,你也可以用向导添加消息映射
      

  8.   

    TO stevecrisewu(月亮骑士) 
    抱歉
      我在cpp文件中添加映射ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
    但总是说WM_KICKIDLE无此定义  消息映射里也没有WM_KICKIDLE  有谁知道如何解决
      

  9.   

    在源文件中定义:#define WM_KICKIDLE WM_USER+102