如何:创建用户控件并承载 MDI 视图

以下步骤演示如何创建.NET Framework 用户控件、在控件类库中创作用户控件(特别是 Windows 控件库项目),然后将项目编译为程序集。 然后,可以从 MFC 应用程序使用此控件,该应用程序派生自使用 CView 类CWinFormsView 类的类。

有关如何创建 Windows 窗体用户控件和创作控件类库的信息,请参阅如何:创作用户控件

注意

在某些情况下,Windows 窗体控件(如第三方网格控件)在 MFC 应用程序中托管时可能无法可靠地运行。 建议的解决方法是在 MFC 应用程序中放置 Windows 窗体用户控件,并将第三方网格控件置于用户控件中。

此过程假定你已创建名为 WindowsFormsControlLibrary1 的 Windows 窗体控件库项目,如如何:在对话框中创建用户控件和主机的过程。

创建 MFC 主机应用程序

  1. 创建一个 MFC 应用程序项目。

    在“文件”菜单上,选择“新建”,然后单击“项目”。 在“Visual C++”文件夹中,选择 “MFC 应用程序”。

    在“名称”框中,输入 MFC02 并将“解决方案”设置更改为“添加到解决方案”。 单击“确定”。

    在“MFC 应用程序向导”中,接受所有默认值,然后单击“完成”。 这会创建具有多个文档接口的 MFC 应用程序。

  2. 配置公共语言运行时 (CLR) 支持的项目。

    在“解决方案资源管理器”中右键单击 MFC01 项目节点,并从上下文菜单中选择“属性”。 此时将出现“属性页”对话框。

    在“配置属性”下,选择“常规”。 在“项目默认值”部分下,将“公共语言运行时支持”设置为“公共语言运行时支持 (/clr)”。

    在“配置属性”下,展开“C/C++”并单击“常规”节点。 将“调试信息格式”设置为“程序数据库 (/Zi)”。

    单击“代码生成”节点。 将“启用最小重新生成”设置为“否(/Gm-)”。 还要将“基本运行时检查”设置为“默认”。

    请单击“确定”以应用更改。

  3. pch.h(Visual Studio 2017 及更早版本中的 stdafx.h)中,添加以下行:

    #using <System.Windows.Forms.dll>
    
  4. 添加对 .NET 控件的引用。

    在“解决方案资源管理器”中,右键单击 MFC02 项目节点并选择“添加”、“引用”。 在“属性页”中,单击“添加新引用”,选择“项目”选项卡下的 WindowsFormsControlLibrary1,然后单击“确定”。 这将以 /FU 编译器选项的形式添加引用,以便程序进行编译;它还会将WindowsFormsControlLibrary1.dll 复制到 MFC02 项目目录中,以便程序运行。

  5. 在 stdafx.h 中,找到以下行:

    #endif // _AFX_NO_AFXCMN_SUPPORT
    

    添加以下行:

    #include <afxwinforms.h>   // MFC Windows Forms support
    
  6. 修改视图类,以便其从 CWinFormsView 继承。

    在 MFC02View.h 中,将 CView 替换为 CWinFormsView,以便出现下列代码:

    class CMFC02View : public CWinFormsView
    {
    };
    

    如果要将其他视图添加到 MDI 应用程序,则需要为创建的每个视图调用 CWinApp::AddDocTemplate

  7. 修改 MFC02View.cpp 文件,在 IMPLEMENT_DYNCREATE 宏和消息映射中将 CView 更改为 CWinFormsView,并将现有的空构造函数替换为下列构造函数:

    IMPLEMENT_DYNCREATE(CMFC02View, CWinFormsView)
    
    CMFC02View::CMFC02View(): CWinFormsView(WindowsFormsControlLibrary1::UserControl1::typeid)
    {
    }
    BEGIN_MESSAGE_MAP(CMFC02View, CWinFormsView)
    //leave existing body as is
    END_MESSAGE_MAP()
    
  8. 生成并运行该项目。

    在“解决方案资源管理器”中,右键单击 MFC02,然后选择“设为启动项目”。

    “生成” 菜单上,单击 “生成解决方案”

    在“调试”菜单上,单击“开始执行(不调试)”

另请参阅

以 MFC 视图的形式承载 Windows 窗体用户控件