本人在做一个数据库管理系统的时候,要求当用户是普通用户的时候,点击进入的主界面的菜单栏的用户管理为灰体,但是一直在初始化里没试成功,各位看下。。
bool csjkdlg::oninitdialog()
{cdialog::oninitdialog();// add "about..." menu item to system menu.// idm_aboutbox must be in the system command range.
assert((idm_aboutbox & 0xfff0) == idm_aboutbox);
assert(idm_aboutbox < 0xf000);cmenu* psysmenu = getsystemmenu(false);
if (psysmenu != null)
{
cstring straboutmenu;
straboutmenu.loadstring(ids_aboutbox);
if (!straboutmenu.isempty())
{
psysmenu->appendmenu(mf_separator);
psysmenu->appendmenu(mf_string, idm_aboutbox, straboutmenu);
}
}// set the icon for this dialog.the framework does this automatically
//when the applications main window is not a dialog
seticon(m_hicon, true);// set big icon
seticon(m_hicon, false);// set small icon
//if(curuser.usertype == "普通用户")// todo: add extra initialization here
//添加登录对话框
clogindlg logindlg;
if(logindlg.domodal()!=idok)
{
cdialog::onok();  
}
else
{
curuser.getdata(logindlg.m_username);
}
return true;   
}这时我想加入一句// 普通用户没有审核权限
if(curuser.usertype == "普通用户") 
  getdlgitem(idc_user_button)->enablewindow(false);但是貌似这一句没法加,也不知道加哪。。我的是基于对话框的谢谢啦 我的是基于对话框的,所以用UPDATE_COMMAND_UI是不行的,我试了。。感谢。。

解决方案 »

  1.   

      CMenu *pMenu = GetMenu();
      if(pMenu && pMenu->GetSafeHmenu())
      {
        pMenu->EnableMenuItem(ID_MENUITEM32772, MF_BYCOMMAND|MF_GRAYED);
      }
      

  2.   

    老帖了!对话框程序是不能直接用ON_UPDATE_COMMAND_UI机制的
    因为ON_UPDATE_COMMAND_UI是在CWinApp的WM_KICKIDLE消息处理中实现的而模态对话框有自己的消息循环,所以不会调用OnUpdateTskNew(CCmdUI* pCmdUI)之类的函数
    简单的方法:
    你可以先CToolBar的GetToolBarCtrl得到CToolBarCtrl,然后调用CToolBarCtrl的EnableButton完美的方法:
    自己处理MFC的WM_KICKIDLE消息,在消息处理函数中加入一句UpdateDialogControls(this, FALSE);
      

  3.   

    非常感谢大家的帮助,会给分的 ,我已经解决了这个问题,完整的过程在我的博客:http://blog.csdn.net/qingzhengxiongmao
    照到这篇文章:基于对话框灰化菜单栏。。