我想实现在登录前 菜单按钮里有的按钮不能使用 是灰色的 ,登录后那些按钮变成可以使用的装态,目前是通过使用getmenu来实现的让按钮不能使用,另外在基于对话框的程序里实现这功能和在基于单文档的程序有什么不通吗??
    刚开始学Mfc好多不懂啊···

解决方案 »

  1.   

    CMenu::EnableMenuItem 
    EnableMenuItem(item,MF_DISABLED)
      

  2.   

    CMenu::EnableMenuItemUINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );返回值:
    返回以前的状态(MF_DISABLED, MF_ENABLED, 或MF_GRAYED),如果无效,则返回-1。参数: nIDEnableItem 指定由nEnable决定的将要有效的菜单项。该参数既可以指定弹出菜单项,也可以指定标准菜单项。  
    nEnable 指定了将要进行的动作。它可以是MF_DISABLED, MF_ENABLED,或MF_GRAYED与 MF_BYCOMMAND或MF_BYPOSITION的组合。这些值通过位与操作进行组合。这些值有下列含义: · MF_BYCOMMAND 指定参数给出已存在的菜单项的命令ID号。此为缺省值。  
    · MF_BYPOSITION 指定参数给出已存在菜单项的位置。第一项所在的位置是0。  
    · MF_DISABLED 使菜单项无效,以便它不能被选择,但不变灰。  
    · MF_ENABLED 使菜单项有效,以便它能够被选择,并可从变灰的状态中恢复出来。  
    · MF_GRAYED 使菜单项无效,以便它不能被选择并同时变灰。  
     说明:
    使菜单项有效、无效或变灰。CreateMenu,InsertMenu,ModifyMenu和LoadMenuIndirect成员函数同时也设置菜单项的状态(有效、无效、或变灰)。
    使用MF_BYPOSITION的值需要应用恰当的CMenu对象。若菜单条的CMenu被使用,那么顶层菜单项(菜单条中的某项)将受影响。如果为了在弹出菜单或嵌套的弹出菜单中通过位置来设置项的状态,那么应用必须指定弹出菜单的CMenu。
    当应用指定了MF_BYCOMMAND标志,那么Windows将检测所有的属于CMenu的弹出菜单项。因此,除非当前正在复制菜单项,那么使用菜单条的CMenu是非常有效的。
      

  3.   

    ON_UPDATE_COMMAND_UI(...)
    pCmdUI->Enable(TRUE/FALSE);
      

  4.   

    用EnableMenuItem和ON_UPDATE_COMMAND_UI都只能将菜单当前的状态设置成一种啊,我现在已经将菜单设置成灰色不能用的状态(通过EnableMenuItem的方法),我现在要实现的是 在点击登录窗口登录成功后原来那些被我设置成不能使用的菜单变成能使用的状态,然后再点击退出后又变成不能使用  该如何实现呢?