hur.cn - 华软网

 热门搜索

怎么让自己建立的菜单部分先无效,然后在某操作之后再让菜单有效

  作者:未知    来源:网络    更新时间:2011/6/11
一个基于对话框的程序,在OnInitDialog()中敲入下列语句建立菜单:
CMenu menu;
menu.LoadMenu(IDR_MENU1);
SetMenu(&menu);
menu.Detach();
 菜单资源像以下格式:

开始      人事管理      其他
登录      查询操作      帮助
退出      删除操作      其他

想在  登录 操作完成之前别的菜单选项都不能用,登录完成之后 菜单恢复功能
ps:用GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
     GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_ENABLED);
    运行时直接出错:。。。。。该内存不能为read的错误
---华软 网友回答---
这里因为你的指针为NULL
你这么多级指针都不判断下是否成功的啊......
指针为NULL之后,加个偏移,就会指向内核地址,当然你的用户程序就不能访问,也就不能read了.
---华软网友回复---
为什么不通过ON_UPDATE_COMMAND_UI实现
---华软网友回复---
引用 1 楼 xiaohuh421 的回复:
这里因为你的指针为NULL
你这么多级指针都不判断下是否成功的啊......
指针为NULL之后,加个偏移,就会指向内核地址,当然你的用户程序就不能访问,也就不能read了.

牛人
---华软网友回复---
2L这个方法比较好的
引用 2 楼 xianglitian 的回复:
为什么不通过ON_UPDATE_COMMAND_UI实现

---华软网友回复---

用GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
  GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_ENABLED);
  运行时直接出错:。。。。。该内存不能为read的错误


你是不是在对话框类的成员函数中 用GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
???

GetMenu()是CMainFrm类的方法,在对话框类中用GetMenu()时要先获得框架类的指针,如下:

CMainFrm *mainWnd=(CMainFrm *)AfxGetMainWnd();
assert(mainWnd);
mainWnd->GetMenu()->GetSubMenu(1)->EnableMenuItem(IDM_STAFF,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

---华软网友回复---
用ON_UPDATE_COMMAND_UI怎么实现呢,我菜鸟啊
---华软网友回复---
引用 6 楼 weixu11521 的回复:
用ON_UPDATE_COMMAND_UI怎么实现呢,我菜鸟啊
这就是个消息映射
http://goxigo.blog.163.com/blog/static/4470373200731351923200/
---华软网友回复---
哦,看错了 ,,是基于对话框的程序,,呵呵      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。