4

我创建了一个带有一些控件(编辑、文本等)的简单对话框,并将其保存到 GME/GME.rc/Dialog 的资源文件夹中

我添加了一个自动生成的事件处理程序,它创建了一个新类(为本示例的目的为 Class.cpp) 注意:Class::Class(CWnd *pParent) : CDialogEx(Class::IDD, pParent) 构造函数是空的,我不确定这是否相关,但我不认为是..

Class.cpp 中有一个 MESSAGE_MAP COMMAND(menu_item_id, &class::member_function()) 调用是自动生成的。它包含在标准的 BEGIN_MESSAGE_MAP 宏内容中。

但是:当单击菜单项时,该项目保持灰色。“enabled=true”和“gray=false”的属性均已正确配置。所以,我认为这是错误是由于消息处理程序未注册。

任何帮助,将不胜感激。

4

3 回答 3

1

对话框不包含通过 MFC 用于启用菜单项的 ON_UPDATE_COMMAND_UI 处理程序列表运行的代码。例如,通常这是由 CFrameWnd 处理的。尝试调用UpdateDialogControls你的OnInitDialog函数。

我看到您的代码也缺少菜单项的 ON_UPDATE_COMMAND_UI 宏,即使它引用的处理程序是为您创建的。

于 2012-05-10T20:12:46.747 回答
1

没有代码,很难提供帮助。您确定将菜单 ID 的消息处理程序放在 CView、CFrame、CDocument 或 CWinApp 派生类中吗?如果你把菜单处理程序放在你的对话框类中,它对你没有多大好处。

于 2012-05-10T16:56:39.103 回答
0

您将菜单项处理程序添加到具有菜单的窗口,通常是 CMainFrame。将消息映射和处理程序复制到 CMainFrame 并查看是否有帮助。我不确定您要在这里做什么-我假设您想在单击菜单项时显示“类”(也许更好地编辑您的帖子以调用此“示例对话框”或其他内容...),对? 或者您是否以某种方式向您的 CDialogEx 派生类添加了一个菜单?如果是最后一个,我想这就是 Mark 所指的——“你如何显示菜单”?您如何手动将菜单添加到对话框中?

于 2012-05-16T15:14:31.263 回答