快速业务通道

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

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
e,
     int nCmdShow)
{
 MessageBox::Show("Hello, Windows Forms");
}

因此,虽然这个简单的示例很有效地演示了最基本的 .NET 框架和 C++ 的托管扩展的概念,但它并不能很好地演示典型的 Windows 窗体程序。对于真实的应用程序,将需要一个 Form 类(或从 Form 派生的类)的实例,如下所示:

void __stdcall WinMain(HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
     long lpCmdLine,
     int nCmdShow)
{
 Form* form = new Form();
 ...
}

form 变量引用了托管类型的一个实例。托管对象是由 .NET 框架的公共语言运行库 (CLR) 处理的,它们的生存周期由垃圾回收器控制的,该回收器在一定的时间取消分配内存。因此,C++ 程序员无需显式地删除托管类型,但是同样不能指望在任何特定时刻(如关闭范围时)破坏对象。

创建窗体后,就需要显示它。如果您曾经看过 Windows 窗体的文档,可能已经注意到了 Form 方法 Show,这意味着:

void __stdcall WinMain(HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
     long lpCmdLine,
     int nCmdShow)
{
 Form* form = new Form();
 form->Show(); // This is not what you want to do.
}

虽然上面的代码可以显示窗体,但是必须眼疾手快才可以看到该窗体,这是因为 Show 以无模式的方式显示窗体。这意味着在 Show 将新的窗体显示到屏幕上之后,会立即将控制权返回给 Main 函数,该函数在返回时将退出进程,同时关闭刚刚显示不久的窗体。要以有模式的方式显示窗体,文档建议使用 ShowDialog 函数:

void __stdcall WinMain(HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
     long lpCmdLine,
     int nCmdShow)
{
 Form* form = new Form();
 form->ShowDialog(); // This is not quite what you want to do.
}

虽然这些代码事实上可以显示一个空窗体,并且在用户关闭它之后才会将控制权返回给 Main 函数,但通常您并不会编写这样的代码。相反,您将把一个窗体指定为主窗体,使得应用程序的其他部分可以把它当作主窗体来进行访问。为此,可以将主窗体作为一个参数传递给 Windows 窗体的 Application 对象的 Run 方法:

#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System::Windows::Forms;
void __stdcall WinMain(HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
     long lpCmdLine,
     int nCmdShow)
{
 Application::Run(new Form);
}

Application 类的静态 Run 方法将显示主窗体并开始发送 Windows 消息,直到主窗体关闭为止。主窗体关闭后,Run 将返回,让我们的 Main 函数退出,以便结束进程。要实际查看这一过程,可以使用下面的命令行编译这个小小的 Windows 窗体应用程序:

C:MSDNMYFIRS~1>cl /clr MyFirstApp.cpp

现在,编译器已经生成了 MyFirstApp.exe,可以执行它了。关闭窗体时,MyFirstApp.exe 将退出,结束您的第一个 Windows 窗体应用程序。

要想增添一些趣味,可以在新窗体上设置一个属性。像 .NET 框架类库中的大多数对象一样,Form 对象有一些可以访问的属性、可以调用的方法和可以处理的事件。可以直接在 Form 类的实例上设置属性,但通常我们不会这么做。相反,每个自定义窗体都是一个派生自 Form 的类,并且会初始化自己的属性,如下所示:

__gc class MyForm : public Form
{
public:
 MyForm()
 {
   Text = "Hello, Windows Forms!";
 }
};
void __stdcall WinMain(HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
     long lpCmdLine,
    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号