**2.1创建一个win32项目**
运行vs2017新建项目->Visual C++ ->桌面向导 然后选择一下存储位置,并给项目取个名字。然后选择window应用程序,勾选空白项,其他不用勾选。使用其他IDE的朋友们创建过程有些许不同 但都大同小异,没问题的。最后确定就ok啦。
然后我们右键源文件,添加->新建项。创建一个main.cpp创建项目就ok啦
**2.2编写第一个win32程序**
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
);
如果是第一次编写win32程序的同学看到这个奇奇怪怪的main函数或许有些奇怪,这函数咋这么多奇奇怪怪过的东西。这个时候,我就必须要负责人的告诉你,千万别被它的外表迷惑,毕竟他终究只是个主函数而已,我们只需要用它来做我们程序的入口就好,那么我们怎么用哪?
首先回忆一下我们的第一个控制台c++程序。
#include<iostream>
using namespace std;
int main()
{
cout<<"hello world!";
return 0;
}
哈哈,那么我们windows
c++程序也就是大同小异了。
#include<windows.h>//注意 我们在编写windows程序时候,要包含头文件windows.h
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
这时候有人会问,哎呀 ,夕霞你是不是糊弄我,下面这程序这程序啥都没有,上面好歹还能弄出个hello world看看。是的,这里就是windows程序和控制台程序之间的区别了。控制台程序我们用输入输出流就能看到结果。但是想要看到Windows程序的结果,则需要有一个窗口作为载体,这个窗口可以是你自己定义的(下一章会详细分析),要么就是众多windows定义好的窗口之一:比如MessageBox。我们来看一下这个程序。顺便放上截图。
#include<windows.h>
int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(NULL,L"Hello win32!",L"消息窗口",MB_OK);
return 0;
}
好啦,在解释这个程序之前,请记住,虽然这只是一个小小的对话框,但是它也是一个窗口。只是样子和我们想象中有些出入。
让我们来解释下这个win32程序,首先大家最在意的应该是winmain函数的括号里的一大堆东西,的却,他足够引人注意,不过,这些参数是程序运行时由系统传递给程序的,所以我们不必太过纠结,了解一下各项意义。
HINSTANCE hInstance:实例句柄,这个参数的意思是操作系统为我们的程序分配的唯一的标识符。就好比我们的每个学生都有自己的学号,只有有了学号,才能在食堂打饭啦,去图书馆借书啦等等,在后面我们还会碰到。
HINSTANCE hPrevInstance:应用程序父句柄,这个参数已经废弃了,所以不管了。
LPSTR lpCmdLine:一个以NULL结尾的字符串,类似于命令行参数,这里我们没必要深入了解。
int nCmdShow:最后,这个整形的参数是什么意思那?它其实是指出如何打开我们的窗口,是最大化还是最小化,还是隐藏。(它的值可以是:SW_SHOW:激活窗口并按当前大小和位置显示。SW_MAXIMZE:最大化显示。SW_MINIMZE:最小化显示。等等。。。。)这个参数我们将在下一节的ShowWindow()中使用。
说完参数,再来说说winmain前面的CALLBACK,可能在平时大家没有见过,我们转到定义之后可以看到如下定义
其实_stdcall 是为了强制程序从左至右的次序处理参数,所以,winmain函数必须使用CALLBACK或者WINAPI 否则winmain将不能正确处理参数。对了 windows程序有很多地方都用了匈牙利命名法,基本原则是:变量名=属性+类型+对象描述 。如h代表hwnd 句柄,具体大家可以百度。
最后就是MessageBox这个函数啦,它其实就是一个Windosw的API函数,调用它可以产生一个小小的对话框。
int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
第一个参数代表消息框的父窗口,这个参数一般设置为NULL。
第二个参数为要显示的内容,是一个以NULL结尾的字符串。
第三个参数为标题,是一个以NULL结尾的字符串。
第四个参数是uType类型,代表这我们要使用那种类型的消息框。
比如MB_OK , MB_YESNO, MB_OKCANCEL等等,,,且大家可以用|符号自由组合他们。
哇 这节就差不多讲这么多吧,对了大家有啥不明白的可以通过Microsoft Help查看器查看自己不明白的函数,虽然都是英文,不过没关系,下个网易有道就好,毕竟我也没过四级
好吧,下一节讲如何创建一个自己的Windows窗口程序,内容可能有点多,我也没啥自信,不过还是想尽量说清楚搞明白让看了的人,如果有啥错误和不足都希望有看过的人指出来谢谢。