** 用 ** ** VC++.net ** ** 制作 ** ** WinForm Application **
新的 .NET Framework 出世了,随之而来的是新的开发方法,开发理念。这本无可厚非的,但微软似乎总是偏爱她的嫡传( VB,VC# ) , .NET Framework 似乎也是为他们量身定做的。唯独大众化的 C++ 被冷落了(虽然 MFC 也进化到了 7.0, 对标准 C++ 支持也比以前强了),先进的 RAD 开发模式始终远离 VC++( 也许是 MFC 框架太成熟了,改起来不方便 ^_^), 不过微软为了让 VC++ 也沐浴点 .NET 的光泽,推出了 MC++(Managed Extensions for C++.),C++
程序员眼光一亮,这回我们也可以追随 .NET 了 ( 虽然依然不能像 VB,VC# 程序员那样用鼠标
指指点点就可以完成一个程序)。 Microsoft .NET Framework Class Library .NET 框架类库
用惯了 MFC 和 API 编程,冷不丁的转向 . NET Framework 可能还有些不习惯,不过用时间长了,你会发现 . NET Framework 也不错么( ^^ )。其实我们还是在用 ”MFC” ,只不过这次是 “ MFC …… ** M _ ** icrosoft .NET **_ F _ ** ramework **_ C _ ** lass Library , 微软 .NET 框架类库”。( ^_^ )
下面我用一个例子来谈谈我的体会我将用 MC++ 制作一个 WinForm Application , WinForm
是 .NET 的标准 GUI 界面 , 功能十分之强大。下面我们就来看看用 MC++ 如何制作一个简单的
Hello,World! 程序。
由于文章篇幅有限, MC++ 的特性我在这里就不详细介绍了,我将在制作过程中稍加解释。下面就开始了:
在 VS.NET 中,建立一个 VC++ 新项目,我们把她取名为 VCWinFormApp, 当然它是个
托管的 C++ 应用程序类型了。之后点击“确定”。等待吧!(我的赛扬 366 正在接受着 VS.NET 的考验)一袋烟的功夫,该创建的文件都已经创建好了。看看吧,有什么东西,哇,只有
VCWinFormApp.cpp 一个主要文件(我们经常认为是 .h,..cpp 比较重要), stdafx.h 和 stdafx.cpp
文件里什么也么有。(想一想原来 MFC 为我们在 stdafx.h 中添加了那么多东东)。不过不要怕, .NET Framework 就是这样,她会让你变懒的(需要你添加的代码很少)。在看看 VCWinFormApp.cpp 吧。
//////////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#using
1<mscorlib.dll>
2
3#include <tchar.h>
4
5using namespace System;
6
7// 这是此应用程序的入口点
8
9int _tmain( void )
10
11{
12
13// TODO: 请用您自己的代码替换下面的示例代码。
14
15Console::WriteLine(S"Hello World");
16
17return 0;
18
19}
20
21//////////////////////////////////////////////////////////////
22
23#using <mscorlib.dll>
24
25using namespace System;
26
27两句我们以前未见过的语句,这里简单解释一下, ** system ** 是 .NET Framework 的最基础的命名空间。
28
29** System ** 命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。
30
31mscorlib.dll是专为MC++定制的dll文件,她为 .NET Framework 接纳 C++ 铺平了道路。
32
33上面的程序仅仅是一个 console 程序而不是我们要做的 WinForm Application ,下面的代码会将她改写成一个
34
35WinForm Application 。
36
37预备知识 :
38
39The #using Directive------- 用来将一些 MC++ 使用的 metadata( 元数据 ) 导入程序。如
40
41#using <mscorlib.dll>
42
43// 这是使用应用程序向导生成的 VC++
44
45// 应用程序项目的主项目文件。
46
47// This is the main project file for VC++ application project
48
49// generated using an Application Wizard.
50
51#include "stdafx.h"
52
53#using <mscorlib.dll>
54
55#include <tchar.h>
56
57#using <system.dll>
58
59#using <system.drawing.dll>
60
61#using <system.windows.forms.dll>
62
63#using <system.data.dll>
64
65using namespace System;
66
67using namespace System::Drawing;
68
69using namespace System::Collections;
70
71using namespace System::ComponentModel;
72
73using namespace System::Windows::Forms;
74
75using namespace System::Data;
76
77namespace myspace
78
79{
80
81public __gc class Form1 : public System::Windows::Forms::Form
82
83{
84
85private :
86
87Button* button1;
88
89Label* label1;
90
91System::ComponentModel::Container* components;
92
93public :
94
95Form1()
96
97{
98
99//
100
101// Required for Windows Form Designer support
102
103//
104
105components = NULL;
106
107InitializeComponent();
108
109//
110
111// TODO: Add any constructor code after
112
113// InitializeComponent call
114
115//
116
117}
118
119protected :
120
121void Dispose( bool disposing )
122
123{
124
125if ( disposing )
126
127{
128
129if (components != NULL)
130
131{
132
133components->Dispose();
134
135}
136
137}
138
139Form::Dispose( disposing );
140
141}
142
143private :
144
145void InitializeComponent()
146
147{
148
149button1 = new Button();
150
151label1 = new Label();
152
153SuspendLayout();
154
155//
156
157// button1
158
159//
160
161button1->Location = Point(23, 96);
162
163button1->Size=System::Drawing::Size(100,60);
164
165button1->Name = "button1";
166
167button1->TabIndex = 0;
168
169button1->Text = "Start my first C++ WinForm Application";
170
171button1->Click += new System::EventHandler( this ,
172
173&Form1::button1_Click);
174
175//
176
177// label1
178
179//
180
181label1->Location = Point(150, 84);
182
183label1->Name = "label1";
184
185label1->TabIndex = 1;
186
187//
188
189// Form1
190
191//
192
193AutoScaleBaseSize = System::Drawing::Size(5, 13);
194
195ClientSize = System::Drawing::Size(292, 273);
196
197Controls->Add(label1);
198
199Controls->Add(button1);
200
201Name = "Form1";
202
203Text = "Form1";
204
205ResumeLayout( false );
206
207}
208
209private :
210
211void button1_Click(Object* sender, System::EventArgs* e)
212
213{
214
215label1->Text = "Hello World!";
216
217}
218
219};
220
221}
222
223// This is the entry point for this application
224
225int __stdcall WinMain()
226
227{
228
229<P</system.data.dll></system.windows.forms.dll></system.drawing.dll></system.dll></tchar.h></mscorlib.dll></mscorlib.dll></mscorlib.dll></tchar.h></mscorlib.dll>