新的例子程序
我想 , 是时候修改下我们一直以来使用的例子程序的代码了 。 我听说最近有一门新的语言叫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》
文章图片
返回搜狐 , 查看更多
【新的例子程序】责任编辑:
- 思科|路由器出现安全漏洞 思科拒绝修复:你们买新的吧
- 小米以全新的旗舰产品阵容惊艳了所有人:小米12S系列。|小米 12S Ultra 其优点是媲美单反的相机
- 让药丸与屏幕融合!iPhone 14 Pro采用灵动岛设计,国产早有先例
- 路由器|路由器出现安全漏洞 思科拒绝修复:你们买新的吧
- M2MacBookAir配备了更新的设计、M2芯片、MagSafe等。|M2 MacBook Air 值得买,对此你怎么看?
- 转变人们向往的地方追求|福州本地传统跑腿如何弃旧创新,为传统跑腿提供了真实案例
- 电视机|iPhone 14系列发布,中兴手机出圈?这背后是技术创新的博弈
- 芯片|关键时刻,中韩成立新的合作机制,“芯片四方联盟”形同虚设
- 本文转自:人民网9月9日|工信部:我国制造业企业智能化生产比例达到6.6%
- 卫星|全新的着装,ColorOS 13除了外衣还有这些大招!