• 新的例子程序


    我想,是时候修改下我们一直以来使用的例子程序的代码了。我听说最近有一门新的语言叫C++,它看起来变得非常流行。那我也赶一下时髦。

    代码如下

    首先,我定义了一个Window窗口类,里面包含一些创建一个窗口所需要的各种小部件,例如窗口句柄,注册窗口,创建窗口,窗口处理过程函数等。类的头文件如下图所示:

    >> 请移步至 topomel 查看图片 <<

    接下来,是对应的类实现代码。

    >> 请移步至 topomel 查看图片 <<

    我们还定义了一个继承自Window的类RootWindow,重写了其创建窗口和消息处理的方法。

    >> 请移步至 topomel 查看图片 <<

    最后,是整个程序的入口点。

    >> 请移步至 topomel 查看图片 <<

    这个程序的基本思想和我们以前的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》

     

  • 相关阅读:
    OSPF高级配置
    DELAY_APPLY 配置参数
    【计算机视觉(CV)】基于图像分类网络VGG实现中草药识别(一)
    Effctive C++
    代码随想录训练营二刷第五十二天 | 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV
    dart中final和const的区别
    Android开发对压缩文件的处理
    详述 MIMIC护理人员信息表(十五)
    Redux-状态管理组件
    如何根据镜像反向生成Dockerfile内容?这三种方式总有一个适合你
  • 原文地址:https://blog.csdn.net/mmxida/article/details/126825963