将事件处理程序添加到用户定义的窗口类

Posted

技术标签:

【中文标题】将事件处理程序添加到用户定义的窗口类【英文标题】:Adding event handler to user defined window classes 【发布时间】:2012-09-25 12:00:31 【问题描述】:

我正在使用 MFC MDI。我创建了一个窗口主文档窗口。我创建另一个窗口(我们称之为第二个窗口)作为 MDI 窗口视图的子窗口,然后创建第二个窗口的子窗口(第三个窗口)。我再次需要创建另一个窗口,第三个窗口的子窗口。我在功能区上有一个按钮,我想在第三个窗口中调用消息处理程序来处理这个命令。我添加了消息映射和所有必需的东西,但它没有调用消息处理程序。如果我在 MDI 窗口视图中定义消息处理程序,它会捕获事件。如果我不在我的主 CWinApp 类或 MDI 窗口视图类中取消消息处理程序,则该按钮将显示为禁用。

我所有的子视图类都是从 CWnd 继承的,主 MDI 窗口是从 CView 派生的。请让我知道我在这里缺少什么。

萨巴

【问题讨论】:

父子关系和焦点都工作正常,但事件没有路由到子窗口 我猜您可能需要自己转发消息。我经历过类似的事情,IIRC 框架转发到它的窗口,但是除非您自己转发消息,否则您打开的任何其他窗口(这些额外的子窗口)可能不会得到任何东西。 感谢 Nerdtron,我认为你是对的,我还尝试了更多的东西,但没有任何效果。基本上,功能区将其发送到主框架,而主框架将其提供给 View 或 App。我没有在 mfc 代码中找到任何与窗口相关的焦点搜索。 【参考方案1】:

我在这里不知所措。您正在使用 MFC;为什么使用事件?使用命令消息和命令消息处理程序代替事件。 使用 MFC 实现且运行良好的命令路由。

【讨论】:

对不起,但我基本上在多个平台上工作,而且每个地方的关键词都是不同的。我正在使用消息和消息处理程序【参考方案2】:

MFC 不会将通过单击功能区按钮生成的消息路由到子窗口。如果我们想向 MDI 窗口的子窗口发送消息,我们需要自己做。功能区按钮的消息要么传递给活动的 MDI 窗口,要么传递给 CWinApp 类。

【讨论】:

以上是关于将事件处理程序添加到用户定义的窗口类的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 自动将事件处理程序注册到通过 Ajax 响应添加到 DOM 的元素上的用户操作

Angular中的单元测试点击事件

是否可以将多个处理程序添加到同一个 socket.io.on 事件?

ExtJS 将事件处理程序动态添加到列编辑器

EXTJS,无法将事件处理程序绑定到控制器

编译器如何生成事件处理程序代码?