.NET框架在用户界面上提供了三种方式:Windows Forms(Win表单)、Web Forms(Web表单)和控制台应用程序。本篇主要讨论如何用托管C++开发Win表单的一般方法。
Win表单是开发标准Win32屏幕的一种更为高级的方法。与Visual C++中的MFC应用桌面程序相比较,最主要区别在于底层的Windows程序系统框架的不同。传统的Windows程序需要一个WinMain主函数,在这个主函数中进行窗口的创建、注册以及通过一个开头语句进行消息循环。MFC对传统的Windows编程方法进行了大量封装,它将WinMain函数隐藏到应用程序框架内部,当用户运行应用程序时,系统首先自动查找该应用程序的全局theApp,然后自动调用虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。而托管C++是通过Win表单中的Application(应用程序类)的方法Run在当前线程中启用一个消息循环,并根据所指定的Form类构造一个默认表单窗口,用于创建和设计窗口的所有用户源代码都添加在这个Form类中。例如下面的程序:
#using using namespace System;
// 添加WinForms所需要的dlls #using "System.dll" #using "System.Windows.Forms.dll" #using "System.Drawing.dll"
// 添加WinForms所需要的名称空间 using namespace System::ComponentModel; using namespace System::Windows::Forms; using namespace System::Drawing;
// 定义一个__gc托管类,包含创建表单的所有代码 __gc class WinForm: public Form { private: String *caption; // WinForm的标题 int width; // WinForm的宽度 int height; // WinForm的高度 public: WinForm() { caption = S"用托管C++开发Win表单应用程序"; width = 400; height = 300; InitForm(); // 调用自定义的表单初始化代码 } void Dispose() // 表单释放,类似于析构函数 { // 所有的删除代码添加在这里 Form::Dispose(); // 默认的释放操作 } void InitForm() // 所有的表单代码都添加在该方法中 { Text = caption; // 设置表单窗口标题 Size = Drawing::Size(width, height); // 设置表示窗口大小 MaximizeBox = 0; // 禁止使用窗口的最大化按钮 } }; #ifdef _UNICODE int wmain(void) #else int main(void) #endif { Application::Run(new WinForm()); // 启用应用程序,运行该类 return 0; } |
代码中,WinForm是我们定义的一个托管C++类,所有的表单程序代码都添加在这个类中,且该类的InitForm是一个主要的成员方法,所有的控件等代码都添加在这个方法中。我们来看看上述代码的运行过程:主函数main中调用Application类的方法Run在当前线程中启用一个消息循环,并根据所指定的Form类构造一个默认表单窗口,随后并调用WinForm类的构造函数,由于构造函数中有一个InitForm方法,因而也一并被调用。InitForm方法包含表单的所有代码,系统会根据其中的代码进行相关属性设置、事件处理和相关方法调用。
上述代码中的Text、Size和MaximizeBox是表单窗口标题、大小和是否使用最大化按钮的属性。前面我们曾提到过,.NET框架的属性操作被简化成类似一个变量的操作,但在内部实际上仍然是调用set和get属性方法。表单窗口属性还有一些,例如ForeColor(窗口前景色)、Menu(系统菜单属性)、Icon(图标属性)、BackgroundImage(背景图像属性)等。
上述程序运行后,结果如图1所示。
综上所述,用托管C++创建Win表单的一般过程如下:
(1) 用Visual C++.NET应用程序向导创建一个托管C++应用程序。
选择“文件”?“新建”?“项目”菜单,在弹出的“新建项目”对话框中选择“Visual C++项目”类型,这时在模板列表中显示出一系列的应用程序项目模板。选择“托管的C++应用程序”模板类型,将项目工作文件夹定位到自己的文件夹中,如“E:\Visual C++.NET程序”。并在“名称”框中输入项目名,单击“确定”按钮即可。
(2) 在源文件中添加Win表单所需要的基本名称空间和相关DLLs,参看上述代码,需要说明的是,随着所使用的.NET类库的不同,相应的名称空间和相关DLLs也需要在此基础上进行添加。
(3) 创建一个基于托管类Form的派生类,所有的Win表单相关的代码都添加在这个类中。
(4) 在main或wmain中添加Application::Run等相关代码。
在下一篇中,我们将着重讨论表单中控件的添加、事件处理以及相关编程技巧。
查看本文来源