2.2.2 面向对象风格的框架(6)
|
| (点击查看大图)图2-6 绘制一个线状茶壶(截图) |
在Update()函数中,首先加入了对ESC和F1键的响应,分别对应退出程序和切换运行模式,最后是我们需要增加的代码,它是用于程序更新的。在你的程序中也应该实现该函数,所要做的就是在第91行下面增加你自定义的更新过程,在本程序中是更新了茶壶旋转的角度m_Angle。
最后一个你需要实现的函数是OpenGL的卸载函数Deinitialize(),该接口所要实现的功能就是释放所有用到的资源。
在GL_Application类中除了提供上述的接口函数外,还定义了程序运行必需的主循环函数和程序入口函数,在GLApplication.h中第86行定义了程序入口函数WinMain(),代码如下:
上面的WinMain()函数是整个程序的入口函数,首先在第42行调用全局的Create()函数创建一个程序实例,如果创建成功则调用Main()函数进入程序的主循环,注意在第46行删除了程序类指针,之所以要这么做是因为在GL_Application的继承类中使用Example * example = newExample(class_name) 分配了一块内存。如果创建程序不成功则弹出错误对话框并返回-1——指示程序错误。
上面WinMain()入口函数中用到了程序的主循环函数Main(),下面来看一下其实现过程:
我们可以看到Main()函数在第199~207行设置窗口的一些属性和特征,并在第208行根据我们的设置注册窗口,当程序循环标志为true时,在第223行创建窗口,然后第226行调用Initialize()函数进行初始化,初始化成功后即开始消息循环,第234行返回当前的计时器值,第235行清空键盘消息。
从第236行开始只要消息不为空(即isMessagePumpActive为true)就进入消息循环,第238行开始检测窗口消息,如果不为退出消息WM_QUIT就分发消息到消息回调函数中处理,否则就退出循环。