教程地址
Tutorial 2: Creating a Framework and Window
学习记录
上一篇文章中,我们构建了一个用于窗口创建的类 CSystem ,并成功使用它启动了窗口。可以看到,在我们封装之后,它的使用及其的方便。而这篇文章中,我们将对其进行扩展,在我们创建窗口后,我们将在主循环中写入程序逻辑。包括我们的鼠标键盘输入以及对应的程序输出,因此,我们将实现 CInput 和 CGraphics 类(之所以不以 COutput 是因为我们的程序不仅仅包含图形一种输出,但我们现在只实现这一种)。在完成今天的两个类后,我们的框架结果将会变为下图的样式 。

我们的 CInput 类将包含鼠标键盘的处理,鼠标与键盘将成为子类来设计,所以这里的 CInput 类简直简单的可怕。
1 | class CInput { |
这将是我们的 CInput 类声明,它仅仅包含了 Initialize() , 以及Shutdown()函数,以及构造和析构函数。我们将在之后为这个类添加键盘处理 CKeyboard 和鼠标处理 CMouse 类(下一篇文章再谈)。
CInput 类的构造方法中我们调用 Initialize() ,而在 Initialize() 中调用 InitializeInput() ,在 Shutdown() 方法里调用 ShutdownInput() 方法。
现在我们已经有了 CInput 类,则准备在 CSystem 里添加对应的元素 。在 CSystem 的声明里为它添加一个 CInput 的指针对象:
1 | CInput *mInput_; |
在 CSystem 的 Initialize() 里我们将初始化 CInput 指针对象,最后在析构函数里释放掉它。
1 | bool CSystem::Initialize() { |
现在,再来看看我们的 CGraphics 类:
1 | class CGraphics { |
我们的 CGraphics 类中的 Initialize() 与 Shutdown() 和 CInput 中的一样,暂且不表。Render() 暂时也是简单的调用了 RenderGraphics() 。而 RenderGraphics() 则是负责了主要的东西,因为我们并没有后续内容,所以在此也暂时不提。
综上所述,我们的 CGraphics 类也是相当简单,现在和 CInput 一样将他加入到 CSystem 的初始化与结束中去:
1 | bool CSystem::Initialize() { |
以上是我们增加了 CInput 和 CGraphics 类后的初始化。但是虽然进行了初始化,但是在代码中却并没有真的调用它,接下来看看在 CSystem 中的调用。
CInput 我们因为没有具体实现的原因,没什么可以动用的。而 CGraphics 则需要在 Run 方法里进行修改。
1 | void CSystem::Run() const { |
我们在 CSystem::Run() 里调用了 CGraphics::Render() 方法。
现在,你点击运行,如果没有错误的话,那么那个黑色窗口应该还会出现。

下一篇我们将会实现 CInput 下的类 CKeyboard 和 CMouse 。