MFC 对话框的事件处理

Posted

技术标签:

【中文标题】MFC 对话框的事件处理【英文标题】:Event Handling for MFC Dialog 【发布时间】:2009-12-23 11:24:50 【问题描述】:

这是我今天的第二个问题,请原谅。

我正在编写一个包装库来与扫描仪设备通信。源代码在 C++ MFC 中。我正在将其转换为将从 C# 调用的普通 Dll。所以,我在 C# 中使用 DllImport 来调用包装库。

现在我得到了 MFC 代码,并且库是一个 ActiveX 对象,至少我是这么认为的。

class CDpocx : public CWnd


因此,在我的包装库中,我将拥有一个 CDpocx 实例,并将通过 C# P/Invoke 调用它。但问题是 CDpocx 也会引发一些我需要捕捉的事件。在传统的应用程序中,我只会附加一个功能。但是我如何将事件附加到非 MFC 类上。

我见过类似的东西:

BEGIN_EVENTSINK_MAP(CVC60Dlg, CDialog)
    //AFX_EVENTSINK_MAP(CVC60Dlg)
    ON_EVENT(CVC60Dlg, IDC_DPOCXCTRL1, 1 , OnReadyDpocxctrl1, VTS_NONE)
    //AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

OnReadyDpocxctrl1是处理1(Ready)事件的函数。

如何在非 MFC 类中获得类似的功能。

问候, 马克苏德

【问题讨论】:

【参考方案1】:

我不确定这是否是你想要的,但如果你想从 C# 调用 ActiveX 组件,你应该使用 Windows Forms ActiveX Control Importer (Aximp.exe) 它将 COM 类型库中 ActiveX 控件的类型定义转换为Windows 窗体控件。

【讨论】:

谢谢。会试试这个。实际上问题是,我有 C++ 和 VisualBasic 的驱动程序和示例代码。 C++ 版本(最初是在 VC6 中转换为 VC++.NET 2008)完美运行,而 Visual Basic 版本(VB6 转换为 VB.NET 并再次转换为 VC#.NET)无法按预期工作。所以我很想创建一个 C++ Wrapper,它将再次从 C# 调用。我会试试你的解决方案。

以上是关于MFC 对话框的事件处理的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2008. MFC 事件向导损坏

捕获托管在 mfc 对话框上的 windows 窗体事件(c#)

MFC 鼠标事件

MFC入门

MFC 对话框在耗时的 OnPaint() 后消失

猎豹MFC--对话框 复选框 单选按钮