C++のWindows游戏开发 第二天

来源:互联网 发布:设置禁止数据写入u盘 编辑:程序博客网 时间:2024/05/16 12:29

今天继续学习了昨天的剩余部份,简单的对 HelloVisualStudio 代码中的函数、参数进行了解。

#include"Windows.h"int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){MessageBox(NULL, L"First Blood !Hello ! 我来征服你了",L"FirstBlood 消息窗口",0);return 0;}

在MSDN中可以查到 WinMain( ) 函数原型


int 之后的 MINAPI 其实可以基本忽略,它可以理解为 WinDef.h头文件中的宏定义,定义如下:

#define WINAPI  _stdcall

_stdcall 表示的是一种调用约定,主要功能是告诉编译器应当以 Windows 兼容的方式来产生机器指令。其实这一句也可体忽略,但会得到一句警告。

WINAPI 有时候会写作 CALLBACK,他们的宏定义是完全一样的

#define CALLBACK  _stdcall

函数中的  _In  也可以理解为一个宏,表示需要自行输入一个参数,其对应的为  _out  ,它表示指定的这个参数是函数本身想外输出(output)的一个参数,之后我们也常常会在代码中见到它们。

HINSTANCE :h 前缀表示这个参数类型是 handle ,句柄的意思(以后会学到),Instance 中文是 实例 连起来就是中文中文实例,hInstance 其实是一个特殊的数值,当一个程序在Windows下运行是,它唯一对应一个运行中的实例,也只有运行的程序实例,才有资格分配到实例句柄,每个程序都会被分配到一个句柄值,并且通过 hInstance  参数传递给程序的入口点 WinMain函数。

而第二个系统默认为为 NULL ,HINSTANCE hPrevInstance 对参数名进行分析 : h代表句柄,Prev 代表先前的(previous) Instance代表为实例。

 

我对以上暂时的理解是 :INSTANCE J就像一把钥匙,可以打开Windows下的一把锁,这样程序才可以安全合法的运行。而第二个参数 hPrevIstance 则是为了检验先前的进程确保不冲突。

LPSTR 类型的是 lpCmdLine ,它是一个以空终止的字符串,指定传递给运用程序的命令行参数,lp 表示该参数是一个指针 , cmd  是 command(命令),CmdLine 命令行,就是类似与DOS下的命令。

int 类型的 nCmdShow ,指定程序窗口显示的显示状态,参数取值 如下:


 这就是 WinMain()函数。

MSDN 中 MessageBox 函数原型:

int WINAPI MessageBox(  _In_opt_ HWND hWnd,  _In_opt_ LPCTSTR lpText,  _In_opt_ LPCTSTR lpCation,    _In_UINT uType);

_opt 代表可选择的(opional),也就是选择权在我们,可以不填,直接用 NULL

第一个参数 HWND 类型 的 hWnd ,表示我们显示的消息框所属的窗口的句柄。在进行Windows编程句柄很重要。

第二个参数 LPCTSTR 类型的 lpText,它是以NULL结尾的字符串,表示显示内容。

第三个参数LPCTSTR 类型的 lpCaptio,同上表示消息的标题内容

第四个参数UINT类型的uType,表示的是消息窗口的格式:







如果想要多个标识符一起用的话,可以使用 :| ,在下一个例子就可以看见。


0 0