如何:创建用户控件并将它承载在对话框中

更新:2007 年 11 月

本主题中的过程假设您正在创建一个新的基于对话框 (CDialog Class) 的 MFC 项目,而您还可以将对 Windows 窗体控件的支持添加到现有 MFC 对话框。

创建 .NET 用户控件

  1. 创建名为 WindowsControlLibrary1 的新 Visual C# Windows 控件库项目。

    从“文件”菜单中,选择“新建”,然后选择“项目”。在“Visual C#”文件夹中,选择“Windows 控件库”图标。

    通过单击“确定”,接受默认项目名称 WindowsControlLibrary1。

    .NET 控件的默认名称将为 UserControl1。

  2. 向 UserControl1 添加子控件。

    在“工具箱”中,打开“所有 Windows 窗体”列表。将按钮控件拖动到 UserControl1 设计图面。

    再添加一个 TextBox 控件。

  3. 在文件 UserControl1.Designer.cs 中,将 TextBox 和 Button 的声明从私有更改为公共。

  4. 生成项目。

    从“生成”菜单中,单击“生成解决方案”。

    您可能希望在生成日志中记下生成的 DLL 的完整路径和文件名,因为您要将这些信息输入 MFC 应用程序中。

创建 MFC 宿主应用程序

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

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

    在“名称”框中,输入 MFC01。将解决方案的设置更改为“添入解决方案”。单击“确定”。将出现“MFC 应用程序向导”。

    在“MFC 应用程序向导”中,选择“应用程序类型”。选择“基于对话框”。接受保留默认设置并单击“完成”。这将创建带有 MFC 对话框的 MFC 应用程序。

  2. 向 MFC 对话框添加 placeholder 控件。

    单击“资源视图”选项卡。在“资源视图”中,双击 IDD_MFC01_DIALOG。对话框资源将显示在“资源编辑器”中。

    在“工具箱”中,打开“对话框编辑器”列表。将“静态文本控件”拖动到对话框资源中。静态文本控件将作为 .NET Windows 窗体控件的占位符使用。重新调整其大小,使其大小接近 Windows 窗体控件大小。

    在“属性”窗口中,将静态文本控件的 ID 更改为 IDC_CTRL1,将“TabStop”属性更改为“True”。

  3. 配置项目。

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

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

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

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

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

    #endif // _AFX_NO_AFXCMN_SUPPORT 
    

    在此行上面添加这些行:

    #include <afxwinforms.h>   // MFC Windows Forms support
    
  6. 添加代码以创建托管控件。

    首先,声明托管控件。在 MFC01Dlg.h 中,转到对话框类的声明,并添加受保护范围内的用户控件的数据成员,如下所示:

    class CMFC01Dlg : public CDialog
    {
       // ...
       // Data member for the .NET User Control:
       CWinFormsControl<WindowsControlLibrary1::UserControl1> m_ctrl1;
    

    接下来,提供托管控件的实现。在 MFC01Dlg.cpp 中,在 MFC 应用程序向导生成的 CMFC01Dlg::DoDataExchange(而不是相同文件中的 CAboutDlg::DoDataExchange)的对话框重写中,添加下列代码以创建托管控件并将其与静态占位符 IDC_CTRL1 相关联:

    void CMFC01Dlg::DoDataExchange(CDataExchange* pDX)
    {
       CDialog::DoDataExchange(pDX);
       DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1);
    }
    
  7. 生成并运行项目。

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

    从“生成”菜单中,单击“生成解决方案”。

    从“调试”菜单中,单击“开始执行(不调试)”。现在,您将看到显示 Windows 窗体控件的 MFC 对话框。

请参见

其他资源

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