新的例子程序
我想,是时候修改下我们一直以来使用的例子程序的代码了。我听说最近有一门新的语言叫C++,它看起来变得非常流行。那我也赶一下时髦。
代码如下
首先,我定义了一个Window窗口类,里面包含一些创建一个窗口所需要的各种小部件,例如窗口句柄,注册窗口,创建窗口,窗口处理过程函数等。类的头文件如下图所示:
接下来,是对应的类实现代码。
我们还定义了一个继承自Window的类RootWindow,重写了其创建窗口和消息处理的方法。
最后,是整个程序的入口点。
这个程序的基本思想和我们以前的scratch 程序一样,但是现在它有了新鲜的柠檬味C++ 气味。 我们没有将状态保存在全局变量中,而是声明了一个 C++ 类并将其连接到窗口。 为简单起见,对象的生命周期与窗口本身相关联。
首先,有一个Window基类,我们将使用它作为我们未来任何“与窗口相关的类”工作的基础类。 目前唯一的派生类是 RootWindow,它是目前程序使用的唯一窗口的顶级框架窗口。 正如你可能怀疑的那样,稍后我们可能会在需要时创建其他派生类。
WinRegisterClass方法是虚拟的(并且不做任何有趣的事情)的原因是,派生类可以修改注册类时使用的 WNDCLASS。 我没有立即需要它,但如果我需要它,它会在那里随时可以供我使用。
我们使用 GWLP_USERDATA来存储指向关联类的指针,从而允许我们从窗口句柄中重建对象的访问。
请注意,在 RootWindow::HandleMessage 方法中,我使用了 Visual C++ __super 扩展。 如果你不想依赖非标准扩展,则可以改为如下的代码:
class RootWindow : public Window
{
public:
typedef Window super;
…
并使用 super 而不是 __super。
这个程序没有做任何有趣的事情; 它只是将来文章中的例子程序的基本骨架。
总结
瞧,穿上C++的衣服后,程序逻辑和可读性有了巨大的变化。通过C++的封装和继承,将Win32窗口的运行机制和消息模型都放到一个类中,我们的入口点如释重负了。
有时候我甚至感觉到,我不是在写代码,而是在雕琢一件艺术品。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The new scratch program》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
- 下一篇: Visual Studio现已支持 C++ 开发容器
- 上一篇: 说说安腾处理器的双栈设计
相关推荐
- 关于x86平台上内存对齐的重要性
- Posted on 09月24日
- 如何在一个全屏窗口中覆盖状态栏?
- Posted on 10月14日
- 为XBox开发者提供的ASan早期发布版本
- Posted on 07月02日
- 小技巧:关于Sleep的用法及注意事项
- Posted on 10月14日
评论已关闭。