中国领先的IT技术网站
|
|

2.1.1 理解InitInstance

《游戏编程入门(原书第3版)》第2章侦听Windows消息,本章将更详细地学习Windows消息机制和主循环,并编写一个完整的能够在屏幕上显示一些内容的窗口程序。将学习窗口句柄和设备环境如何一起在窗口上产生输出。本章继续探究实时游戏循环,尤其是获得WinMain之外的实时循环的方法。我们将在本章学到一些新的技巧,以便让实时循环运行,为下一章的DirectX做准备。本节为大家介绍InitInstance。

作者:陈征/傅鑫 等译来源:机械工业出版社|2011-03-02 18:50

Tech Neo技术沙龙 | 11月25号,九州云/ZStack与您一起探讨云时代网络边界管理实践


2.1.1 理解InitInstance

InitInstance是WinMain调用的第一个函数,用于创立程序。InitInstance基本上只创建程序窗口。这个函数的代码本可直接插入到WinMain中,但将它们放到单独的函数中会更方便(这与多实例的处理有关,因为一个程序可能会多次运行)。注意,InitInstance不是一个像WinMain那样的基本Windows函数,而只是一个“助手”函数。实例句柄是一个程序中使用的全局变量,用于保存主实例。下面展示典型的InitInstance函数调用的形式及它做的工作。不过无须将其当成律条来遵守,因为这只是个标准做法而已,并不是要求。

1. InitInstance函数调用

InitInstance的函数调用如下所示:

 

我们来了解一下参数:

HINSTANCE hInstance。WinMain传递的第一个参数,是它从Windows接收来的程序实例。InitInstance将使用全局实例来检查这个参数,看看新实例是否需要终止(Windows中的常见过程)。如果是,那么程序的主实例会被设置为前台窗口。对于用户而言,就好像再次运行程序的结果就是将原来的实例提到前面来。

int nCmdShow。WinMain传递给InitInstance的第二个参数,也是从Windows接收的参数。这个参数最常见的值有:SW_HIDE和SW_SHOW,Windows通常依据操作系统中的事件(例如电源关闭)来发送这个值。

InitInstance函数返回一个布尔值,它要么是1(true),要么是0(false),告诉WinMain启动是成功了还是失败了。注意,WinMain没有将任何命令行参数传递给InitInstance。如果想处理lpCmdLine字符串,则可创建一个新函数来处理它,也可按照通常的做法来做,即在WinMain中处理参数。

2. InitInstance的结构

在应用程序编程中,经常推荐使用资源表来处理字符串。资源字符串的使用实际上是个人偏好问题(而笔者不使用它们)。有时需要将游戏中的文本移植到另一种语言,而这正是将字符串储存为资源所能带来的便利。但总的来说,这种用法并不普遍。显示资源中的简单消息的代码需要查找每个用到的字符串,这会降低程序运行速度并让代码更为凌乱,尤其是对初学者而言。

从代码看,InitInstance函数颇为简单。下面先列出代码,然后讲解函数的每一部分:

 
 
注意,在这段代码之前,程序实际上根本没有用户界面!使用CreateWindow函数创建的主窗口成为程序所用的窗口。InitInstance的全部工作就是创建应用程序所需的新窗口并显示。CreateWindow的参数列表中包括了描述每个参数用途的注释。在创建(并校验)了窗口之后,最后几行代码实际显示新创建的窗口:
 
hWnd值由CreateWindow函数传递给这些函数。在创建窗口时,窗口就已经存在于Windows中了,只是看不见。UpdateWindow通过将WM_PAINT消息发送给窗口处理器告诉新窗口把自己绘制出来。不仅如此,程序也经常以这种方式和自己对话,这在Windows编程中很常见。InitInstance中的最后一行将值1(true)返回给WinMain:
 
如果读者还记得的话,则知道WinMain对待这个返回值很严肃!如果InitInstance目前的情势不对,WinMain将终止程序:
 
从WinWain中返回一个值,无论它是1(true)还是0(false)都将立即终止程序。如果InitInstance的返回值是1,那么前面讲过,WinMain将继续执行,它在while循环中进行消息处理,然后程序将开始运行。
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

Cisco网络工程案例精粹

《Cisco网络工程案例精粹》是一本以案例为基础兼顾知识概述的案例性书籍,所收录的案例都是笔者精心挑选出来的在网络工作中常见的案例。 ...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Phthon,最神奇好玩的编程语言