在MFC中使用C#窗体:第一个简单窗体嵌入示例

在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#编写好的功能模块以控件形式打包亦可支持,达到无缝的嵌入效果!

示例程序源码:
示例程序全部源码下载

参考出处:

Microsoft:在 MFC 对话框中承载 Windows 窗体用户控件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值