如何在CDialog中让EnableMenuItem有效...
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在CDialog中让EnableMenuItem有效...相关的知识,希望对你有一定的参考价值。
在视图工程下此方法可以使指定的菜单项变灰:
CMainFrame::m_bAutomenuEnable=FALSE;
pM->EnableMenuItem(1,MF_GRAYED);
问题是我的工程是窗口:
工程里根本就没有派生于CMainFrame的类!!
我在CDialog中右键消息里建了一个菜单:
CMenu popup;
popup.LoadMenu(IDR_LIST);
CMenu* pM = popup.GetSubMenu(0);
pM->EnableMenuItem(1,MF_GRAYED);
无法使指定的菜单项变灰。。。郁闷~~
任何窗口类都来源于CWnd. 而 CDialog 来源于CWnd. 所以 可以直接调用 CWnd 的函数:
CMainFrame *pM=(CMainFrame*)AfxGetMainWnd();
至于 EnableMenuItem 函数参数,你要查一下。
这里,我只给你解决你的难点--- pM 的获取问题。追问
给不存在的值赋值你不觉得会报错吗,,,我没去试。
追答给不存在的值赋值 -- 只能给变量赋值。
==============
MFC 程序 CDialog 来源于CWnd.
用:
CMainFrame *pM=(CMainFrame*)AfxGetMainWnd();
获取 pM。
有了pM,你才能调它的成员函数:
pM->EnableMenuItem
学习MFC过程,遇到函数运用不懂的,推荐你去CSDN之类的论坛可以找到很多解答,可以首先去Microsoft官方帮助查看函数的使用方法。看完之后就会知道如何解决。如下链接:
http://technet.microsoft.com/zh-cn/h62wh3y1(v=vs.100)
改成pM->EnableMenuItem(1,MF_GRAYED | MF_BYPOSITION); 即可。
默认按标识 MF_BYCOMMAND属性,
可以改成pM->EnableMenuItem(ID_CUT,MF_GRAYED); ID_CUT是你资源标识。
望提点的建议对你有帮助!追问
我知道是资源标识,没有用的这样,不信你百度:EnableMenuItem无效
追答我在vs2010上面调试通过之后,才给出回答的。那需要知道你的工具开发环境,还有你具体的代码。可能是其他原因导致的。
EnableMenuItem的第一个参数是item的id而不是item在菜单中的位置 你是不是弄错了追问
那ID是我乱写的。。。问题和ID没关系
如何在 Visual Studio 2013 中使用 CDialog 类启用按钮的属性页
【中文标题】如何在 Visual Studio 2013 中使用 CDialog 类启用按钮的属性页【英文标题】:How to Enable a Button's Property Pages in Visual Studio 2013 with CDialog Class 【发布时间】:2015-03-06 16:05:19 【问题描述】:在 Visual Studio 2008 中,可以从 CDialog 框的资源视图中双击一个按钮,然后直接转到将帮助我编辑其操作的代码。但是,在 2013 年,当我双击一个按钮时,会弹出一个“添加类向导”窗口。我只想编辑我的按钮的作用。我怎样才能做到这一点?在按钮的属性窗口中,“属性页面”按钮(扳手)被禁用,当我单击“控制事件”按钮(闪电)时,没有任何选择。 提前致谢!
【问题讨论】:
【参考方案1】:如果您要严格查找属性,请右键单击鼠标并选择“属性”。此外,您可以在按钮上单击鼠标右键,然后从弹出菜单中选择“Add Event Handler...”。这应该会显示一个 Event Handler Wizard 对话框,允许您选择控件支持的任意数量的事件。但是请注意,如果您的资源存储在仅资源的 dll 中,则这种方法可能会出现问题。
【讨论】:
以上是关于如何在CDialog中让EnableMenuItem有效...的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2013 中使用 CDialog 类启用按钮的属性页
如何在 CWinThread 派生类中正确创建 CDialog 框