2003年3月份的MSDN杂志中描述了这样一个示例(http://msdn.microsoft.com/msdnmag/issues/03/03/WindowsForms/default.aspx)。这个示例使用的代码稍微繁琐,而且没有描述如何处理控件的事件。MFC 8.0增加了一系列这方面的支持来把这个集成过程简单化(参考http://msdn2.microsoft.com/library/ahdd1h97.aspx)。这使得在MFC程序中使用.Net中的一些比较好用的类,例如System::Windows::Forms::PropertyGrid比以前容易多了 举例来说,要在MFC的基于对话框的程序中使用System::Windows::Forms::PropertyGrid控件,首先创建一个基于对话框的程序,添加必要的引用:
#include <afxwinforms.h>// MFC Windows Forms support
#using <system.dll>
#using <Microsoft.VisualC.Dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <mscorlib.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::ComponentModel;
using namespace Microsoft::VisualC::MFC;
using namespace stdcli::language;
之后添加代码(下面这个类是从MSDN中的充分利用.NET 框架的PropertyGrid 控件这篇文章里面借过来的,关于此控件的更加高级的使用方法也可以参考这篇文章)。
public ref class AppSettings
{
public:
[Description("文档设置"), Category("文档设置"), DefaultValue(false)]
property Boolean saveOnClose ;
[Description("文档设置"),Category("全局设置"), ReadOnly(true),DefaultValue("欢迎使用应用程序!")]
property String^ greetingText ;
[Category("全局设置"), DefaultValue(4)]
property Int32 itemsInMRU ;
[Description("以毫秒表示的文本重复率。"), Category("全局设置"),DefaultValue(10)]
property Int32 maxRepeatRate ;
[Browsable(false), DefaultValue(false)]
property Boolean settingsChanged ;
[Category("版本"), DefaultValue("1.0"), ReadOnly(true)]
property String^ appVersion ;
AppSettings()
{
this->saveOnClose = true;
this->greetingText = gcnew String("欢迎使用应用程序!");
this->maxRepeatRate = 10;
this->itemsInMRU = 4;
this->settingsChanged = false;
this->appVersion = gcnew String("1.0");
}
};
class CPropertyGridTestDlg : public CDialog
{
//为了偷懒起见,向导生成的默认代码省略