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

更新:2007 年 11 月

下列过程说明如何创建 .NET Frameworks 用户控件、创作控件类库(特别是 Windows 控件库项目)中的用户控件,然后将项目编译到程序集中。然后使用 MFC 应用程序中的控件,该应用程序使用从 CView ClassCWinFormsView Class 派生的类。

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

说明:

在某些情况下,WinForms 控件(如第三方网格控件)当在 MFC 应用程序中被承载时行为可能不可靠。建议的解决方法是:将 Windows 窗体用户控件放置在 MFC 应用程序中,而将第三方网格控件放置在用户控件中。

此过程假定您按照 如何:创建用户控件并将它承载在对话框中 中的过程创建了名为 WindowsControlLibrary1 的 Windows 窗体控件库项目。

创建 MFC 宿主应用程序

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

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

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

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

  2. 配置项目。

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

    在“属性页”对话框中的“配置属性”树控件中,选择“常规”,然后在“项目默认值”部分中,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。单击“确定”。

  3. 向 .NET 控件添加引用。

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

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

    #endif // _AFX_NO_AFXCMN_SUPPORT 
    

    在此行上面添加这些行:

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

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

    class CMFC02View : public CWinFormsView
    {
    };
    

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

  6. 修改 MFC02View.cpp 文件以将 IMPLEMENT_DYNCREATE 宏和消息映射中的 CView 更改为 CWinFormsView,并且将现有空构造函数替换为下面显示的构造函数:

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

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

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

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

请参见

其他资源

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