当前位置:网络安全 > vs2010消息窗口_【win32】vs2010的窗体程序Helloworld

vs2010消息窗口_【win32】vs2010的窗体程序Helloworld

  • 发布:2023-09-24 21:56

本来,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同时,能提高一下自己面对框架的能力。

这几天将开发集成环境换成了vs2010,刚开始用,有些地方不是很懂,通过查阅相关文档,现得以解决。

就拿VS2010 调试窗口一闪而过解决方法如下:

#include

using namespace std;

void main()

{ int add(int,int,int);

float average(int);

int x,y,z, sum;

cout<< "Input x, y, z:";

cin>>x>>y>>z;

sum=add(x, y, z);

cout<<"sum="<

cout<<"average="<

// system("pause");//防止系统窗口闪烁一下就没了,方法一

}

int add (int a, int b, int c)

{

return (a+b+c);

}

float average (int s)

{

return (s/3.0);

}

以上是测试代码。

解决方法如下:

若此时进行的操作是编译(F5),可先运行程序(Ctrl+F5),若仍然一闪而过,用下面方法解决。 方法一: 1.若是C++文件,在程序最后写一句(return之前)添加:system("pause"); 2.若是C文件,首先在程序头添加头文件:#include"stdlib.h";然后在程序最后写一句(return之前)添加:system("pause")。 方法二: 1.右键单击当前工程-属性? 2.选择配置属性-链接器-系统? 3.更改系统选项中的“子系统”配置,选择下拉菜单的第一个“控制台 (/SUBSYSTEM:CONSOLE)” 然后选择"开始执行(不调试)",也就是ctrl+F5;

这样即可一劳永逸解决窗口一闪而过这个问题。

这个问题发现的着实尴尬,怎么说用了vs也有两年了,但是真的是才发现调试与开始执行的区别,最基础的问题反而被一直遗漏。 说回正题,相信有很多人在使用vs时都会发现,vs的控制台程序,控制台窗口不会停下来,造成这个问题的原因有两个:

1.按的“调试”,而不是“开始执行”。 2.“子系统”配置选项不是“控制台 (/SUBSYSTEM:CONSOLE)”。

先说第一个,“调试”的快捷键是F5,“开始执行”的快捷键是ctrl+F5,如果我们想执行一个程序,而不是调试一个程序话,当然需要使用“开始执行”,而不是“调试”。 因为调试意味着我们想插入断点跟踪变量,此时让控制台停下来有什么意义呢?虽然我们也可以在代码的最后加入一行getchar();让程序等待输入,但是这和加个断点没有任何区别。 这个问题主要是因为vs的初始界面,“解决方案配置”旁边的那个按钮是“调试”,而不是“开始执行”。

第二个问题就是,使用的是“开始执行”,但是控制台依然不停止,这个问题只需要改下配置: (1)右键单击当前工程->属性 (2)选择配置属性->链接器->系统 (3)更改系统选项中的“子系统”配置,选择下拉菜单的第一个“控制台 (/SUBSYSTEM:CONSOLE)”

相关文章

最新资讯