如何:创建用户控件并将它承载在对话框中
更新:2007 年 11 月
本主题中的过程假设您正在创建一个新的基于对话框 (CDialog Class) 的 MFC 项目,而您还可以将对 Windows 窗体控件的支持添加到现有 MFC 对话框。
创建 .NET 用户控件
创建名为 WindowsControlLibrary1 的新 Visual C# Windows 控件库项目。
从“文件”菜单中,选择“新建”,然后选择“项目”。在“Visual C#”文件夹中,选择“Windows 控件库”图标。
通过单击“确定”,接受默认项目名称 WindowsControlLibrary1。
.NET 控件的默认名称将为 UserControl1。
向 UserControl1 添加子控件。
在“工具箱”中,打开“所有 Windows 窗体”列表。将按钮控件拖动到 UserControl1 设计图面。
再添加一个 TextBox 控件。
在文件 UserControl1.Designer.cs 中,将 TextBox 和 Button 的声明从私有更改为公共。
生成项目。
从“生成”菜单中,单击“生成解决方案”。
您可能希望在生成日志中记下生成的 DLL 的完整路径和文件名,因为您要将这些信息输入 MFC 应用程序中。
创建 MFC 宿主应用程序
创建新 MFC 应用程序项目。
从“文件”菜单中,选择“新建”,然后选择“项目”。在“Visual C++”文件夹中,选择“MFC 应用程序”图标。
在“名称”框中,输入 MFC01。将解决方案的设置更改为“添入解决方案”。单击“确定”。将出现“MFC 应用程序向导”。
在“MFC 应用程序向导”中,选择“应用程序类型”。选择“基于对话框”。接受保留默认设置并单击“完成”。这将创建带有 MFC 对话框的 MFC 应用程序。
向 MFC 对话框添加 placeholder 控件。
单击“资源视图”选项卡。在“资源视图”中,双击 IDD_MFC01_DIALOG。对话框资源将显示在“资源编辑器”中。
在“工具箱”中,打开“对话框编辑器”列表。将“静态文本控件”拖动到对话框资源中。静态文本控件将作为 .NET Windows 窗体控件的占位符使用。重新调整其大小,使其大小接近 Windows 窗体控件大小。
在“属性”窗口中,将静态文本控件的 ID 更改为 IDC_CTRL1,将“TabStop”属性更改为“True”。
配置项目。
在“解决方案资源管理器”中,右键单击 MFC01 项目节点,并从上下文菜单中选择“属性”。将出现“属性页”对话框。
在“属性页”对话框中的“配置属性”树控件中,选择“常规”,然后在“项目默认值”部分中,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。单击“确定”。
向 .NET 控件添加引用。
在“解决方案资源管理器”中,右键单击 MFC01 项目节点并选择“引用”。在“属性页”中,单击“添加新引用”,选择“WindowsControlLibrary1”(在“项目”选项卡下),然后单击“确定”。这添加了 /FU 编译器选项形式的引用以便程序进行编译;它还将 WindowsControlLibrary1.dll 复制到 MFC01 项目目录中以使程序运行。
在 stdafx.h 中,请找到以下行:
#endif // _AFX_NO_AFXCMN_SUPPORT
在此行上面添加这些行:
#include <afxwinforms.h> // MFC Windows Forms support
添加代码以创建托管控件。
首先,声明托管控件。在 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); }
生成并运行项目。
在“解决方案资源管理器”中,右键单击 MFC01 并选择“设为启动项目”。
从“生成”菜单中,单击“生成解决方案”。
从“调试”菜单中,单击“开始执行(不调试)”。现在,您将看到显示 Windows 窗体控件的 MFC 对话框。