以 MFC 对话框的形式承载 Windows 窗体用户控件
来源:互联网 发布:手机淘宝复制链接 编辑:程序博客网 时间:2024/04/30 20:07
MFC 提供模板类 CWinFormsDialog,使用该类可以在模式或无模式 MFC 对话框中承载 Windows 窗体用户控件 (UserControl)。CWinFormsDialog 是从 MFC 类 CDialog 派生的,所以该对话框可以以模式或无模式方式启动。
CWinFormsDialog 用以承载用户控件的过程与在 MFC 对话框中承载 Windows 窗体用户控件中描述的类似。但是,CWinFormsDialog 管理用户控件的初始化和承载,因此不必手动编程。
有关显示与 MFC 一起使用的 Windows 窗体的示例应用程序,请参见“MFC and WinForms Integration”(MFC 和 WinForms 集成)。
创建 MFC 宿主应用程序
创建新 MFC 应用程序项目。
在“文件”菜单上,选择 New,然后单击“项目”。在“Visual C++”文件夹中,选择“MFC 应用程序”。
在“名称”框中,输入 MFC03,并将“解决方案”设置更改为“添入解决方案”。单击“确定”。
在“MFC 应用程序向导”中,接受所有默认值,然后单击“完成”。这就创建了一个具有多文档界面的 MFC 应用程序。
配置项目。
在“解决方案资源管理器”中,右击 MFC03 项目节点,然后从上下文菜单中选择“属性”。将出现“属性页”对话框。
在“属性页”对话框中的“配置属性”树控件中,选择“常规”,然后在“项目默认值”部分中,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。单击“确定”。
向 .NET 控件添加引用。
在解决方案资源管理器中,右击 MFC03 项目节点,然后选择“引用”。在“属性页”中,单击“添加新引用”,选择“WindowsControlLibrary1”(在“项目”选项卡下),然后单击“确定”。此操作添加一个 /FU 编译器选项形式的引用,以便程序进行编译;它还将 WindowsControlLibrary1.dll 复制到 MFC03 项目目录中,以便程序运行。
将 #include <afxwinforms.h> 添加到 stdafx.h 中现有 #include 语句的末尾。
添加一个作为 CDialog 子类的新类。
右击项目名称并添加一个作为 CDialog 子类的 MFC 类(名为 CHostForWinForm)。由于您不需要对话框资源,则可以删除其资源 ID(选择“资源视图”,展开“对话框”文件夹,删除 IDD_HOSTFORWINFORM 资源。然后删除代码中对该 ID 的所有引用。)
将 CHostForWinForm.h 和 CHostForWinForm.cpp 文件中的 CDialog 替换为 CWinFormsDialog<WindowsControlLibrary1::UserControl1>。
对 CHostForWinForm 类调用 DoModal。
在 MFC03.cpp 中,添加 #include "HostForWinForm.h"。
在 CMFC03App::InitInstance 定义中的 return 语句之前,添加:
CHostForWinForm m_HostForWinForm;
m_HostForWinForm.DoModal();
生成并运行此项目。
在“生成”菜单上,单击“生成解决方案”。
在“调试”菜单上,单击“开始执行(不调试)”。
接下来,将添加代码,用来从 MFC 应用程序监视 Windows 窗体上控件的状态。
添加 OnInitDialog 的处理程序。
显示“属性”窗口 (F4)。在“类视图”中,选择“CHostForWinForm”。在“属性”窗口中,选择 overrides,并在 OnInitDialog 所在的行中,单击左列并选择“<添加>”。这将向 CHostForWinForm.h 中添加下行:
virtual BOOL OnInitDialog();
按如下方式(在 CHostForWinForm.cpp 中)定义 OnInitDialog:
BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE;}
接下来,添加 OnButton1 处理程序。将以下行添加到 CHostForWinForm.h 中 CHostForWinForm 类的 public 节中:
virtual void OnButton1( System::Object^ sender, System::EventArgs^ e );BEGIN_DELEGATE_MAP( CHostForWinForm ) EVENT_DELEGATE_ENTRY( OnButton1, System::Object^, System::EventArgs^ );END_DELEGATE_MAP()
在 CHostForWinForm.cpp 中,添加如下定义:
void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) { System::Windows::Forms::MessageBox::Show("test");}
生成并运行此项目。当您单击该按钮(位于 Windows 窗体上)时,将运行 MFC 应用程序中的代码。
接下来,将添加代码,用来从 MFC 代码中显示 Windows 窗体上文本框中的值。
在 CHostForWinForm.h 中 CHostForWinForm 类的 public 节中,添加如下声明:
CString m_sEditBoxOnWinForm;
在 CHostForWinForm.cpp 中的 DoDataExchange 定义中,向该函数的末尾添加以下三行:
if (pDX->m_bSaveAndValidate) m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text);else GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);
在 CHostForWinForm.cpp 中的 OnButton1 定义中,向该函数的末尾添加以下三行:
this->UpdateData(TRUE);System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm);System::Windows::Forms::MessageBox::Show(z);
生成并运行此项目。
- 以 MFC 对话框的形式承载 Windows 窗体用户控件
- Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
- 如何:在 Windows 窗体 DataGridView 单元格中承载控件
- 在 Windows 窗体 DataGridView 单元格中承载控件
- 如何:在 Windows 窗体 DataGridView 单元格中承载控件
- 以动画的形式启动窗体
- 演练:在 Windows 窗体中承载 Windows Presentation Foundation 复合控件 【转载】
- 『转MSDN』如何:在 Windows 窗体 DataGridView 单元格中承载日历控件
- 【MFC应用】让对话框内的控件在窗体大小发生变化时随之变化
- 如何以DLL文件形式创建和使用用户控件
- MFC 对话框的radio控件
- 如何在Windows窗体中调用系统调色板对话框,并获取用户所选择的颜色?
- Android初级教程以动画的形式弹出窗体
- 对话框以字符串形式显示
- 以DLL形式加载的自动更新的显示对话框
- vs2005的windows 窗体控件
- C#Windows窗体的控件
- windows窗体控件的学习
- 模拟smarty以php为模板的类
- 创业兵法之软件用户们最后的战役
- PuTTY
- 战争迷雾的实现——占用影响图
- Oracle 表空间操作
- 以 MFC 对话框的形式承载 Windows 窗体用户控件
- 白领笑话六则 过节了 大家笑一下
- 通知单的长文本和合作伙伴功能获得
- Merry Christmas
- 21天学通JAVA之事务处理
- 构建个人博客系统一(构建数据库)
- 校验码
- AMD 平台 VC2005下 慎用#pragma pack(push,1)来进行字节对齐
- format 使用一例 之 color & input