如何在 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中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框