VC++.NET中使用Windows.Forms

熟悉Virsual Basic开发方式的朋友们在使用Visual C++时,一定发过这样的牢骚:“为什么不能自己设计窗体,为什么不能手动画控件?这能叫Visual(可视化)吗?你看人家Borland C++…… ”的确,制作一个控件丰富的主窗体在以往是件比较繁重的工作,不过这样的境况,在 Visual Studio.NET 中已经有所改善了。在本文中,笔者就将和大家一起领略一下期望中的轻松和愉快。

  还记得过去用VC++创建一个窗体的过程么,它意味着相对不少的代码描述一个窗体类(或应用程序类)的对象,每个属性的设置都要对应着一行赋值语句。如果是用Windows API,需要自己书写主事件循环。至于图标、位图什么的还要作为资源去调用。想添加控件就比较麻烦了。首先,你要有一本MFC大全,照着它来添加各种控件类的实例,截取它用到的各种Windows消息……这些也就是对于VC++制作窗口程序,笔者没学下去的原因。

  这两天鼓捣VC++.NET,才发现原来这里的VC++也可以使用窗口编辑器。笔者这就带着大家一起用它来创建一个窗口。我们还是从经典的“Hello,World”开始。

  我们应该创建一个Windows Form Application(.NET)(Windows窗口应用程序)类型的工程。这里将它命名为HelloWorld。

  单击“OK”确定,我们看到.NET为我们自动创建了一个主窗体Form1。可以看到左面的文件列表里,仍然是传统的源文件、头文件和资源,稍有一点变化的就是该Form1的头文件,笔者稍候会详细说明,其实我们以往要做的工作都被封装在这个头文件里。呈现在我们面前的已不再是VC++传统的代码编辑界面,而是一个窗口编辑界面。

  读者的开发环境如果使用的是Visual C++6.0的界面风格的话,还看不到最重要的控件条(ToolBox),要在菜单项“视图(View)-〉工具箱(ToolBox)”中把它点开。我们看到了令人兴奋的一个个控件,你可以随意在上面画画控件爽几下,然后我们继续。托拽出一个Button和一个Label,我想这对你来说都应该不陌生。右键单击它们的任何一个,选择菜单的最后一项Properties把属性列表叫出来(应该就出现在文件列表的下面),你可以编辑它们的属性,再也不必去写语句了。试着给咱们的程序换个图标,不用再麻烦地调用资源了,很容易了不是?

  保持良好的命名习惯,我将它俩命名为btnSay和lblShow。开始添加代码了,双击btnSay,进入代码界面,光标会自动跳转至按钮单击事件处,其他的东西可以一概不管,只需要在这里添加上代码

this->lblShow->Text = "Hello,the World!";

  我想该做得也就这么多了(有点像VB了不是?)毕竟是C++,得编译。按Ctrl+F5编译链接运行,结果如图:

  真正的C++程序员这时会思考代码是怎样被组织封装的。我们先来看看文件的组织形式。这里依然是使用资源的形式来用图标、菜单什么的,因此这里有同以往一样的*.rc和resource.h。工程的主体是Form1.h/cpp文件对,主程序也在里面。不过主程序似乎是一空壳,真正的窗体对象信息都在Form1.h里。它现在给我们呈现出一副可视化设计器的姿态,我们右键点击它,在弹出的对话框中选择第二项

  终于揭开了它的神秘面纱,看到了隐藏在背后的代码。(有点故弄玄虚了,其实刚才你编写代码时就已经见到它了。这令我也很诧异,头文件里居然会有执行代码!)还有一点要说的,刚才你是不是找不到在那儿修改Form1对象的名字?在代码界面的属性列表里就能改了。我把它改称frmMain。

时间: 2024-10-03 00:44:33

VC++.NET中使用Windows.Forms的相关文章

vb中使用Windows Forms(转)

1.丰富的控件集使用System.Windows.Forms 名字空间中的类,你可以创建Visual Basic .NET 应用程序并获取Microsoft Windows 操作系统中可以使用的丰富用户界面特征的所有好处.这个名字空间提供了Form 类和许多其他可以添加到forms 中去创建用户界面的控件.许多额外的控件包含在 以前的一些外部库(.ocx's) 或第三方产品.一些现存的控件现在允许通过对象模型简单的访问属性和方法而不是需要复杂的应用程序编程接口 (APIs)去完成扩展功能.2.平

如何在IE中托管Windows Form

如果曾经使用Java开发过Web应用程序,你一定会对Java applets比较熟悉,这是一种基本上在浏览器中运行的小型程序.当浏览器加载包含有Java applets标志的HTML代码时,Java applets就会执行,网页中的Windows Forms控件的运行方式与Java applets相似.我们可以使用由Windows Forms技术提供的丰富的类开发Windows Forms控件,然后在网页中部署这些控件,当浏览器加载这些网页时,就会执行包含在Windows Forms控件中的代码

Windows Forms中的数据绑定(二)

window|数据 运行我们运行这个程序来看看是否国家可以正常的显示了.1. 按下F5来运行程序.2. 点击Countries下拉框来看看是否国家数据已经可以显示了.如果正常的话,你就可以看到如下图8所示的程序: 图8.使用ComboBox来显示小数据集可以提高性能带参数的查询来显示数据现在已经可以看到ComboBox中的国家数据了,接着我们就来做选择ComboBox中的一个国家,在DataGrid中只显示这个国家的客户资料.我们按照这些步骤来做:1. 把form的load事件中读取DataGr

Windows Forms中的数据绑定(一)

window|数据 Windows Forms中的数据绑定 作者:刘志波   摘要:这篇文章是讲解在Windows Forms中如何使用ADO.NET简单的将Form和包含任何结构的数据绑定在一起.通过简单或者复杂的数据绑定,把Form的control的属性绑定到指定的数据上. 目标: 学习Microsoft.NET平台中数据绑定的基础知识 学习怎样生成一个简单的数据绑定form 学习如何往你生成的数据绑定form中添加ComboBox和ListBox Learn how to base

VC中基于Windows的精确定时

在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作. 众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的. 这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列 中的消息就暂时被挂起,得不到实时处理.因此,不能简单地通过Windows消息引发一个对定时要求

如何处理Windows Forms程序中未处理的异常

如果Windows Forms程序中有未被捕获的异常,会导致程序崩溃并且给用户造成不良的印象.例如下面的程序,模拟了一个未捕获的异常: 按钮事件为: private void button1_Click(object sender, EventArgs e) { throw new Exception(); } 点击Exception 按钮,会弹出如下默认窗口 Windows Forms提供了两个事件来处理未捕获的异常发生时的情况,分别是 Application.ThreadException和

VC中基于 Windows 的精确定时

在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作. 众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的. 这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列 中的消息就暂时被挂起,得不到实时处理.因此,不能简单地通过Windows消息引发一个对定时要求

在 System.ArgumentException 中第一次偶然出现的“System.Windows.Forms.dll”类型的异常

问题描述 我是开发的winform应用程序,开发的时候控件库用了devexpress控件,另外使用了一个只支持单线程的ocx控件[VG]用来绘图,我在程序中对ocx控件进行封装,重新封装成一个control,然后在主界面中使用,现在的问题是,我在这界面调用控件的绘图方法,本身程序没报错,但是就不绘图,然后我设置断点调试,居然发现又可以绘图,然后我调出VS的输出窗口,发现问题了,就在不设置断点的情况下,发下每当执行绘图操作的时候,输出窗口都会报如下错误:在System.ArgumentExcept

Spread for Windows Forms快速入门(8)---单元格中用户动作触发的事件

这篇文章概括介绍了单元格的哪些事件是由控件的用户动作触发的.虽然它没有全面地列出的用户可能执行的每一个动作,但是它详细地描述了用户所使用的大部分普通操作所引发的事件. 因为某些动作一直出现,或者某些动作反复出现, 我们就在列表中放弃了这部分动作.举例来说,这些列表并不包括MouseMove, MouseHover, MouseEnter, MouseLeave, Invalidated和CursorChanged事件. 如果你想在此基础上做进一步的研究,我们提供了一个示例以便你与Spread控件