您的位置:首页 > 编程语言

游戏编程大师技巧—windows程序的基本构造

2015-10-13 21:03 357 查看
空余时间拿出来学习游戏开发时间其乐无穷的事情有木有,当然不能被导师抓住,我是专心做学术的好孩子。。

任何一个程序的人生应该是从一句dos控制台的hello word 开始的,而windows的程序应该从一个最简单的窗体开始。

首先吐槽一下微软编程的匈牙利风格,实在不习惯随便大小写切换。。。

就像一个最简单的cpp程序都是从main()开始一样,window程序总是从WinMain()(再次吐槽一下匈牙利。。)开始的。

我们从一个最简单的windows程序开始解剖它。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include<windowsx.h>

int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{MessageBox(NULL,"you donnot love me!!",
"hello,cs_unsky",MB_OK|MB_ICONEXCLAMATION);
return(0);
}
#define WIN32_LEAN_AND_MEAN创建一个windows程序有两种方式,一种是使用微软基础类库(Microsoft Foundation Class,)就是传说中的mfc(顺便再吐槽一下某大牛写的一篇mfc兴亡论,过多的冗余和内嵌是这个类库的败笔,菜鸟还是只会用就好了、、),另一种就是软件开发工具包就是我们经常说的sdk 而这句话的作用就是告诉编译器我们用的是sdk开发,而不是用的MFC,(我们也跟不需要MFC的内容)!

接下来就是

#include<windows.h>

#include<windowsx.h>

我曾因为一个关键词的错误而去查询了一下这两个头文件的区别,这两个都是基本的window文件,其实在windows.h中包含了很多很多的库文件,具体调用可以偷懒这样一句概括,而windowsx.h这个头文件查阅文档说有许多重要的宏和常量的头文件。等有兴趣的时候可以具体的看看他的源码。

int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
作为程序的入口第一次入手总会想,我草,参数好多。

首先WINAPI声名符,它强制了参数从左到右传递,而不是象CDECL声名符那样从又到左传递。

没啥可说的记住即可:

int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)


WINAP从左到右

CDECL 从右到左

一下是每个参数的具体意义:

hinstance 这个参数是一个windows为你的应用程序生成的实例句柄,实例是用来跟踪资源的指针或数。

hprevinstance 哈哈哈哈,在我学习这个时候是2015年,微软已经废弃了这个参数!!好开森有木有。。

lpcmdline 这个参数是一个空的终止字符串,回想一下标准的c++main函数的参数 main(int argc,char**argv)很相似有木有。。不过不同的是,它没有一个单独的参数来向argc那样指出命令行参数个数。

ncmdshow最后的这个参数是个整数,传给应用程序,这样用户就有点人机交互的意思。。。如果你这么认为的话,话说最讨厌一堆的参数有木有,算了,反正我也记不住,以后自己回来看。。

下面开始比较有成就感的代码段:

int MessageBox(HWND hwnd,

LPCTSTR lptext,

UINT UTYPE);

hwnd 这是信息框连接的窗口句柄,我们可以设置成NULL那么你眼前的这个大桌面就成了这个窗口的父亲。

lptext 就是这个信息框的名字。

lpcaption 就是这个框里显示什么。

utype 他决定了要现实的信息框,微软大爷给我们提供了五花八门的信息框,恩,window上你见过的任何一种窗口标志你都可以通过这个调用,反正记不住,以后用着具体查询。

好了跑一下这个程序。

对了为了避免vs2010这编译器出现乱七八糟的错误,还是修改下编译器的参数为好。



首先在项目属性的清单工具里的输入输出选项中的嵌入清单选择否!这样就可以避开很严重的编译错误,具体原因我查询了,但是我忘记了。。。

另一个很无语的是vs2010默认是使用unicode编译的,但是我们需要的是多字符集,所以需要在项目属性的常规里面把字符集调整成多字符集。



然后我们就可以跑起来我们的第一个窗体了。

恩效果就是这个样子的。



好了。有时间写window窗体在游戏开发的实际操作,这些太菜了有木有。参数太多,并不需要一一赋值,等有了一两个小项目之后,就可以直接粘贴复制。。


int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: