在MFC中嵌入C#窗体:第一个简单窗体嵌入示例
文章目录
前言
在C++与C#混合开发的项目中,MFC窗体与C#窗体的互相嵌入是常见需求之一。本文介绍将C#窗体嵌入MFC中的一个简易示例步骤。
编程环境:VS2015
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建 C# 类库-用户窗体
新建C#类库项目,如图:
添加用户控件,如图:
在UserControl1控件设计器上添加buttom 和textbox,并修改背景色为蓝色,如图:
给button添加一个弹框事件响应,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ClassLibrary2
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("hello world!");
}
}
}
生成项目。
在“生成”菜单中,单击“生成解决方案”。
二、创建MFC对话框程序并调用
1.在相同项目中再创建MFC对话框程序
创建后效果如图:
2.调用
删除MFC对话框上全部控件,新增一个Static,将其区域拉大,在"属性"窗口中,将Static控件的 ID 更改为IDC_CTRL1 ,将 TabStop 属性更改为 True。
2.1为公共语言运行时配置项目 (CLR) 支持。
在解决方案资源管理器中,右键单击项目节点,然后单击"属性"。
在" 属性页" 对话框的" 配置属性"下,选择"常规 “。 在"Project默认值"部分中,将"公共语言运行时支持"设置为"公共语言运行时支持” (/clr) 。
在 "配置属性"下,展开 “C/C++ “并选择” 常规” 节点。 将 “调试信息格式” 设置为 "程序数据库 (/Zi) " 。
选择" 代码生成" 节点。 将 “启用最小重新生成 " 设置为” (/Gm-) “。 此外, 将"基本运行时检查” 设置为 “默认”。
以上摘自Microsoft帮助文档,实测还需增加一项:选择“代码生成节点”,将“启用C++异常”设置为“/EHa”
单击“确定”应用更改。
2.2 添加对 .NET 控件的引用。
在解决方案资源管理器,右键单击 项目节点,然后单击"添加"和"引用"。 在"属性"页上,单击"添加新引用",选择"项目"选项卡下 (ClassLibrary2) ,然后单击"确定"。
在 Stdafx.h 中,找到以下行:
#endif // _AFX_NO_AFXCMN_SUPPORT
在上方添加以下行:
#include <afxwinforms.h> // MFC Windows Forms support
手动引用方式为指定搜索目录,并添加代码引用,如下:
#using "ClassLibrary2.dll"
$(SolutionDir)ClassLibrary2\bin\Debug
如图:
2.3添加代码以创建托管控件
在对话框类.h前后添加如下代码:
#using "ClassLibrary2.dll"
// CMFCApplication1Dlg 对话框
class CMFCApplication1Dlg : public CDialogEx
{
CWinFormsControl<ClassLibrary2::UserControl1> m_ctrl1;
...
.cpp中如下操作:
...
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1);
}
...
设定MFC程序为启动项目,生成解决方案。
手动拷贝ClassLibrary2.dll到MFC程序所在目录,并运行MFC程序,效果如下图:
嵌入的C#窗体的按钮事件可正常响应执行。
总结
此种方式从字面意思来看,是为了支持C#的部分控件在MFC中的使用,从实测看来,将C#编写好的功能模块以控件形式打包亦可支持,达到无缝的嵌入效果!
示例程序源码:
示例程序全部源码下载
参考出处: