如何隐藏已有的菜单项?

xwqboy 2004-06-23 03:02:05
我做了一些菜单,但其中几项现在不用,又不确定以后会不会用
所以想把这几个隐藏起来
用的时候再显示
我该怎么做?
我建的是单文档工程
...全文
1702 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
搞定了

你再我新开的贴里接分吧

这个贴分少了

-________-
pomelowu 2004-06-24
  • 打赏
  • 举报
回复

其实如果你用户的菜单项正好是主菜单的子集的话,不用我前面说的那么麻烦了。
一开始你就加载少的那个菜单作为默认。然后如果是管理员的话,就往默认的菜单上面添加需要增加的菜单项。
具体怎么做看看上面的文章吧。
pomelowu 2004-06-24
  • 打赏
  • 举报
回复
还有就是
http://dev.csdn.net/article/21/21086.shtm
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
我全部的菜单是主的

然后我又建了一个一部分的(即用户的)

ID是拷贝过去的

然后用用户的菜单进去后

点击菜单时程序一阵乱跑

xwqboy 2004-06-24
  • 打赏
  • 举报
回复
: pomelowu(羽战士) (

我建了二个菜单资源

但其中一个是另一个的一部分

所以ID一样了

这样是不是不可以?
pomelowu 2004-06-24
  • 打赏
  • 举报
回复
上面的代码是在程序一开始就能决定是面向客户的还是面向管理员的情况下使用的。实际上你需要把它改为:
if (...)//管理员
{
CSingleDocTemplate* pDocTemplate;
...
}
else
{
CSingleDocTemplate* pDocTemplate;
...
}


另外,可以在CMainFraime里边重写
// CMainFrame::OnReplaceMenu() is a menu command handler for CMainFrame
// class, which in turn is a CFrameWnd-derived class. It loads a new
// menu resource and replaces the SDI application window's menu bar with
// this new menu. CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnReplaceMenu()
{
// Load the new menu.
m_NewMenu.LoadMenu(IDR_SHORT_MENU);
ASSERT(m_NewMenu);

// Remove and destroy the old menu
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);

// Add the new menu
SetMenu(&m_NewMenu);

// Assign default menu
m_hMenuDefault = m_NewMenu.GetSafeHmenu(); // or m_NewMenu.m_hMenu;
}
也能加载新的菜单
pomelowu 2004-06-24
  • 打赏
  • 举报
回复
在App类的InitInstance中找到:
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME, //这个改为相应的菜单资源ID
RUNTIME_CLASS(CMultimediaDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMultimediaView));
AddDocTemplate(pDocTemplate);
修改我添加注释的部分
Kudeet 2004-06-24
  • 打赏
  • 举报
回复
使菜单的某一项变灰…………也就是禁用:

打开类向导(class wizard),
找到你的菜单某项的ID,如ID_FILE_SAVE,
点击选中,在右边一message栏里会看到
COMMAND
UPDATE_COMMAND_UI
选择UPDATE_COMMAND_UI,
添加函数,得OnUpdateFileSave()
在其中加入:
pCmdUI->Enable(false);
这样就使其变灰了,
同理,改为true就可用了
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
: lyplyp() ( ) 信誉:100 2004-06-24 16:17:00 得分: 0

禁用吧
GetDlgItem(ID号)->EnableWindow(FALSE);


这个语句应该写在哪里?

xwqboy 2004-06-24
  • 打赏
  • 举报
回复
我建的是单文档的工程

请说明一下在哪个类里面写,写什么

我对菜单不是很熟
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
pomelowu(羽战士)
你做两个菜单资源,根据用户不同动态加载。

怎么加载,请详细一点
lyplyp 2004-06-24
  • 打赏
  • 举报
回复
禁用吧
GetDlgItem(ID号)->EnableWindow(FALSE);
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
急!

如果做出来了

我愿出100分
pomelowu 2004-06-24
  • 打赏
  • 举报
回复
不行的话换个角度吧

“我想用这个来设置打开工程的人的权限

一些人只能看到一部分菜单

而管理员可以看到全部的菜单”

——————
你做两个菜单资源,根据用户不同动态加载。
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
还有哪位高手指点一下

我想用这个来设置打开工程的人的权限

一些人只能看到一部分菜单

而管理员可以看到全部的菜单
xwqboy 2004-06-24
  • 打赏
  • 举报
回复
上面二个看了看
不行啊
我建的是VC 单文档工程

Kudeet 2004-06-23
  • 打赏
  • 举报
回复
http://www.pcvc.net/category/content.asp?sendid=203
pomelowu 2004-06-23
  • 打赏
  • 举报
回复
看看这个吧:

http://www.vckbase.com/document/viewdoc.asp?id=657
xwqboy 2004-06-23
  • 打赏
  • 举报
回复
没有人知道吗?
xwqboy 2004-06-23
  • 打赏
  • 举报
回复
up
加载更多回复(10)

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧