2.2.2 面向对象风格的框架(3)
在GLWindow.h中第29行定义的Create()函数非常重要,用来创建一个Windows窗口,具体实现见上面,首先在第155行设置全屏标志,然后设置像素描述结构,第180行定义窗口的类型,然后检查如果是全屏模式,将调用成员函数ChangeScreenSetting()来进行窗口模式转换,转换成功则隐藏鼠标并设置为顶层窗口,若不成功则尝试窗口模式。
第199~251行调整我们的窗口,使其客户区的大小为我们设置的大小。如果窗口左上角的X或Y坐标为负,则调整为0并调整窗口的位置。
第218~228行根据上面我们对窗口属性的设置来创建窗口,创建成功则保存在句柄m_hWnd中。第238行查找一种最接近的像素格式,并设置为我们的像素格式。第247行创建OpenGL渲染描述表,并与设备描述表进行关联,最后显示和调整OpenGL窗口的大小。
|
|
|
最后一个在操作就是删除窗口Destroy(),它主要完成取消当前渲染描述表与设备描述表的关联,并删除渲染描述表和设备描述表,还有删除当前窗口。最后第286~290行检查如果为全屏模式则首先变换到窗口模式,并显示鼠标。
2.键盘类Keys的设计及实现
|
我们用一个键盘数组m_KeyDown[]来保存键盘256个按键的状态,若某个键被按下则对应数组值为true,反之,按键释放则值为false。第44行定义了Clear()方法,对键盘数组信息进行清空,它在构造函数中被调用,保证了键盘信息的准确性。第46行定义了检查某个按键是否被按下的方法IsPressed(),它实际上是通过检查对应按键数组中的值是否为true来实现的。
第48行定义了设置按键按下的方法SetPressed(),它设置对应按键数组的值为true;同样,第50行定义了设置按键释放的方法SetReleased(),在程序中调用这两个方法就可以更新键盘消息进行人机交互了。



