首页 > 学院 > 开发设计 > 正文

【win32】vs2010的窗体程序Helloworld

2019-11-11 05:01:02
字体:
来源:转载
供稿:网友

本来,mfc都已经是很落后的东西,现在写窗体都用C#,提到vs的窗体大家都想到c#。虽然如此,但本来了解Windows窗体的编程机制,同时又本着vc6可以实现的东西,vs都可以实现而且更进步的理念,同时市面上大部分介绍win32窗体C++编程的书籍都是以VC6为版本的,所以开倒车也要在VS中实现win32窗体程序的了。

具体这样做:

1、打开VS2010,废话,如下图,创建一个win32窗体程序。

2、点下一步,直接默认设置点完成,创建一个Windows应用程序

3、可以直接编译,运行了,但是生成出来的东西并不能让我们满意,如下图所示,有一个我们并不需要出现的菜单栏,我们还想在窗体中输出一个Helloworld。

或许此刻,你觉得VC6没有这么乱吧,或者认为VC6和VS2010差别很大?按照部分书上所示,在创建工程选择第3项,编译运行一劳永逸?

但其实并不是,在VC6同样如此的。而且你还可以发现,其实VC6那些文件和这里VS2010文件也是差不多的。

实际上VS2010只是放了些兼容性文件上去而已。来来去去还是那一套,绘出一个窗体,然后在这个窗体有一个函数在不停地循环,就是为了读鼠标或者键盘的响应信息。然后这些信息统统扔到LRESULT CALLBACK WndPRoc这个消息回调函数里面,你要弄什么就在这个函数里面写吧。

就是个框架,没有什么技术含量,和你改java web什么的,改win32窗体独有的程序框架里面的东西,在里面加你自己的东西就行了。

好,说了这么多,到底怎么完成我们去掉菜单栏和输出一个Helloworld文件的梦想呢?

4、直接对Win_Helloworld.cpp(文件名根据你第一步的工程名不同而不同)这个主cpp入手,进行修改。

(1)去掉菜单栏,对ATOM MyRegisterClass(HINSTANCE hInstance)函数,整个程序的第87行入手,如下图修改,将其值换成NULL。

同时注释或者删去142-158行消息回调函数中关于菜单栏单机处理的case WM_COMMAND事件。

172-190行一大段关于“关于”对话框的函数。

(2)输出Helloworld

接下我们需要对消息回调函数中的case WM_PAINT:这个所谓的“重绘事件”进行入手,就是你每次移动、最大化这个窗口,这个事件都会被触发的,窗体会被重绘,人家vs2010也非常好心你就是应该在这里开始你的win32窗体程序的旅程,将case WM_PAINT:修改成如下所示,其实就是加了SetTextColor和TextOut两个函数而已:

case WM_PAINT:	hdc = BeginPaint(hWnd, &ps);	// TODO: 在此添加任意绘图代码...	SetTextColor(hdc,RGB(0,0,0));//黑色的画笔	TextOut(hdc,100,100,L"Helloworld",strlen("Helloworld"));//在(100,100)这个文件,输出Helloworld。	EndPaint(hWnd, &ps);	break;即:

你可以将这个hdc,理解成在这个窗体画东西的画笔。然后呢,各个函数基本都是名副其实了,值得提醒在TextOut函数中,不像VC6,在VS2010中,所有那些LPCTSTR,不能直接放个字符串上去,要在前面加个大写L,强行转化一下。将一个普通字符串转化为 系统中的窗体字符(大概就是这个意思)。所以你就知道C++各种各样的变量是多么蛋疼,php等无变量类型的设计是多么伟大。

写到这里就写完了,运行结果如下图所示:

最后,做个小终结吧。

写C++的Win32窗体程序,别拿以前C语言那种,从0开始的思维往上面套。就是系统已经给你一个框架,你按照他的要求在这个框架上面改。

起步的时候,并不需要对这个框架有多熟悉,先从这个框架的一些基本东西入手,实现一些最基本的功能。

程序猿出来混也基本上是如此,很少让你拿一门语言从0开始的,基本上都是在框架中修修补补,创造。

或者在了解Win32窗体程序的同时,Win32最基本的WIN API同时,能提高一下自己面对框架的能力。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表