新的例子程序

我想 , 是时候修改下我们一直以来使用的例子程序的代码了 。 我听说最近有一门新的语言叫C++ , 它看起来变得非常流行 。 那我也赶一下时髦 。
代码如下
首先 , 我定义了一个Window窗口类 , 里面包含一些创建一个窗口所需要的各种小部件 , 例如窗口句柄 , 注册窗口 , 创建窗口 , 窗口处理过程函数等 。 类的头文件如下图所示:
新的例子程序
文章图片
接下来 , 是对应的类实现代码 。
新的例子程序
文章图片
新的例子程序
文章图片
我们还定义了一个继承自Window的类RootWindow , 重写了其创建窗口和消息处理的方法 。
新的例子程序
文章图片
最后 , 是整个程序的入口点 。
新的例子程序
文章图片
这个程序的基本思想和我们以前的scratch程序一样 , 但是现在它有了新鲜的柠檬味C++气味 。 我们没有将状态保存在全局变量中 , 而是声明了一个C++类并将其连接到窗口 。 为简单起见 , 对象的生命周期与窗口本身相关联 。
首先 , 有一个Window基类 , 我们将使用它作为我们未来任何“与窗口相关的类”工作的基础类 。 目前唯一的派生类是RootWindow , 它是目前程序使用的唯一窗口的顶级框架窗口 。 正如你可能怀疑的那样 , 稍后我们可能会在需要时创建其他派生类 。
WinRegisterClass方法是虚拟的(并且不做任何有趣的事情)的原因是 , 派生类可以修改注册类时使用的WNDCLASS 。 我没有立即需要它 , 但如果我需要它 , 它会在那里随时可以供我使用 。
我们使用GWLP_USERDATA来存储指向关联类的指针 , 从而允许我们从窗口句柄中重建对象的访问 。
请注意 , 在RootWindow::HandleMessage方法中 , 我使用的是VisualC++__super扩展 。 如果你不想依赖非标准扩展 , 则可以改为如下的代码:
classRootWindow:publicWindow
{
public:
typedefWindowsuper;

并使用super而不是__super 。
这个程序没有做任何有趣的事情;它只是将来文章中的例子程序的基本骨架 。
总结
瞧 , 穿上C++的衣服后 , 程序逻辑和可读性有了巨大的变化 。 通过C++的封装和继承 , 将Win32窗口的运行机制和消息模型都放到一个类中 , 我们的入口点如释重负了 。
有时候我甚至感觉到 , 我不是在写代码 , 而是在雕琢一件艺术品 。
最后
RaymondChen的《TheOldNewThing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Thenewscratchprogram》
新的例子程序
文章图片
返回搜狐 , 查看更多
新的例子程序】责任编辑: