如何在 MFC 应用程序中捕获 OLE 控件事件?由创建的 ActiveX 控件触发

Posted

技术标签:

【中文标题】如何在 MFC 应用程序中捕获 OLE 控件事件?由创建的 ActiveX 控件触发【英文标题】:How to catch the OLE control event in MFC app? fired by ActiveX control which is created 【发布时间】:2011-08-16 16:54:27 【问题描述】:

我在我的 MFC 应用程序中动态创建了一些 ActiveX 控件。我想处理他们的事件,比如click、dblclick。但我不知道我应该捕获什么样的消息将代码放在哪里才能捕获它们。 如果我在设计 GUI 时将这些控件放在对话框窗口上,则可以添加事件处理程序。 MFC自动添加的代码如下:

BEGIN_EVENTSINK_MAP(CButtonMsgDlg, CDialog)
    ON_EVENT(CButtonMsgDlg, IDC_CWBOOLEAN1, DISPID_DBLCLICK,   CButtonMsgDlg::DblClickCwboolean1, VTS_NONE)
END_EVENTSINK_MAP()

void CButtonMsgDlg::DblClickCwboolean1()

   // TODO: Add your message handler code here

【问题讨论】:

// TODO: Add your message handler code here 对我来说似乎是一个很好的指示。您可以对动态创建的控件执行相同的操作,只需手动添加 ON_EVENT/ON_COMMAND/etc 以及您将在控件创建中使用的 id。如果需要,您还可以使用一系列 id。 有数百个控件需要动态创建。这些控件的 ID 是在运行时分配的。所以在编译之前手动添加它们似乎是不可能的。有没有其他方法可以解决这个问题? 【参考方案1】:

如果您在编译时已经知道事件类型,但不知道控件 id,请查看How to create a sink interface in a MFC-based COM client

【讨论】:

以上是关于如何在 MFC 应用程序中捕获 OLE 控件事件?由创建的 ActiveX 控件触发的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中的 OLE Overridables 是啥?

在MFC中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框

我如何知道我的 MFC 应用程序是不是使用 COM / OLE?

在 MFC 中捕获鼠标指针形状更改事件

如何在 MFC CDialog 类中自动删除事件处理程序?

如何在 Windows 窗体应用程序中显示 MFC 控件?