快速业务通道

使用C++的托管扩展针对Windows窗体编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
 int nCmdShow)
{
 Application::Run(new MyForm);
}

在 C++ 的托管扩展中,自定义托管类型是使用 __gc 修饰符声明的。请注意,MyForm 类派生自 Form,然后在构造函数中初始化了它自己的属性。这提供了一个很好的用法模型,如新的 Main 函数中所示,该函数创建了 MyForm 类的一个实例。

但这个窗体仍旧很乏味。除系统提供的特点外,它没有任何交互功能。我们可以通过添加一个按钮来增加一些交互功能,如下所示:

MyForm()
{
 Text = "Hello, Windows Forms!";
 Button* button = new Button();
 button->Text = "Click Me!";
 this->Controls->Add(button);
}

向窗体添加按钮就是创建一个新的 Button 对象,设置我们需要的属性,并将其添加到该窗体所管理的控件列表中。虽然上面的代码会在窗体上产生一个按钮,在单击它后看上去像是被单击了,但并不会发生别的事情,这是因为您还没有处理该按钮的 click 事件。您可以这样来处理该事件:

__gc class MyForm : public Form
{
public:
 MyForm()
 {
  Text = "Hello, Windows Forms!";
  Button* button = new Button();
  button->Text = "Click Me!";
  button->Click += new EventHandler(this, button_click);
  this->Controls->Add(button);
 }
 void button_click(Object* sender, EventArgs* e)
 {
  MessageBox::Show("Ouch!");
 }
};

处理按钮的 Click 事件涉及两项工作。第一项是创建具有适当签名的处理程序方法,我们称其为 button_Click。绝大多数 .NET 框架事件的签名都是一个函数,该函数什么都不返回,但是获取两个参数:一个表示事件的发送方(本例中为按钮)的对象,和一个 System::EventArgs 对象(或者一个从 EventArgs 类派生的对象)的实例。

预订事件所需的第二项内容是在 MyForm 构造函数中使用 += 运算符的行。这种表示法意味着您要向与特定对象上的特定事件有关的所有其他方法的列表中添加一个方法。这要求 EventHandler 委托对象的一个实例。委托是一个类,该类将对事件的调用转换为预订该事件的方法的调用。

请注意,Button 类上的 Click 事件是对 EventHandler 委托的引用,因此,要将自己的方法添加到订户列表中,您还需要创建一个该种类的委托的实例。当然,搞清楚您所感兴趣的所有事件的委托签名,或者通过手动编写代码来将控件添加到窗体上,很快会成为很乏味的事情。幸运的是,这同样可以避免,因为 Visual Studio .NET 2003 中集成了 Windows Forms for C++。

使用 Visual Studio .NET 设计器创建 Windows 窗体

在 Visual Studio .NET 2003 之前,只有 C# 和 Visual Basic .NET 具有可视窗体设计器支持。C++ 的托管扩展没有。很幸运,现在 Visual Studio .NET 附带了 C++ 的托管扩展的 Windows 窗体设计器。

大多数 Windows 窗体项目都在 New Project 对话框中开始,您可以通过单击 File,指向 New,然后单击 Project,或者通过按 CTRL+SHIFT+N 来访问该对话框。

运行 Windows 应用程序向导时,可以随意选择项目名称和位置,然后就可以在设计器中得到一个空白窗体。

在 MFC 中,仅对对话框支持拖放设计和用户界面布局。普通视图必须在代码中进行布局。但是,Windows 窗体则以一种统一的方式对待所有的窗体,因此相同的拖放设计器适用于各种窗体。窗体的类型(有模式或无模式,对话框或视图)取决于它的使用方式,而不是设计方式。

设计器中的 Windows 窗体和 MFC 的下一个重大区别是设计器在代码中而不是单独的资源文件中保存控件和布局信息。这与 MFC 很不相同,MFC 将 Win32 对话框资源中的对话框布局信息保存在 .rc 文件中。这两种方案都各有优缺点,但是 MFC 程

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号