新的例子程序

新的例子程序

作者:BlogUpdater |  时间:2022-09-13 |  浏览:172 |  评论已关闭 条评论

我想,是时候修改下我们一直以来使用的例子程序的代码了。我听说最近有一门新的语言叫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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

评论已关闭。