ATL的GUI程序设计(2)[3]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

猜想,还是猜想!

请允许我在本章中不为你解释这个类的任何具体细节,取而代之的是继续的猜想。因为,这个类中需要解释的东西太多了,以至于我必须为它单独开辟一章。

  • 窗口类的注册是由这个C++类的构造函数与DECLARE_WND_CLASS宏一起完成的。
  • 对于BEGIN_MSG_MAP与END_MSG_MAP这一部分,想必使用过MFC的朋友们应该更容易理解。是的,这一对宏可以算作ATL的消息映射,在其中由MESSAGE_HANDLER作为消息分流器,将各种窗口消息分配给各个处理函数。
  • 创建窗口时指定的样式貌似和模板参数CWinTraits有关。

当然,除了这些猜想之外,你可能还会同时存在以下疑问:

  • CWindowImpl、CWindow、CWinTraits究竟是什么?
  • 窗口类是在何时注册的?
  • 消息分流器是如何实现的?

也许你还会有更多的疑问,那么就让我一并将它们留到下一章再解决吧。如果你实在等不及的话,atlwin.h的代码也会告诉你一切的。

补叙CComModule

由于这本书主要针对的是ATL 3.0/Visual C++ 6.0,所以我疏忽了对CComModule的研究。在此感谢老李老刀兄提出的一点,就是CComModule在ATL 7.0中已经不建议使用了。于是我将MSDN中的相关章节摘抄下来,权作借花献佛之用。

CComModule 替换类

ATL 的早期版本使用 CComModule。在 ATL 7.0 中,CComModule 功能被若干个类所取代:

  • CAtlBaseModule 包含大多数使用 ATL 的应用程序所需的信息。包含模块和资源实例的 HINSTANCE。
  • CAtlComModule 包含 ATL 中的 COM 类所需的信息。
  • CAtlWinModule 包含 ATL 中的窗口化类所需的信息。
  • CAtlDebugInterfacesModule 包含接口调试支持。
  • CAtlModule 下列 CAtlModule 派生的类被自定义为包含特定应用程序类型中所需的信息。这些类中的大部分成员都可以被重写:
    CAtlDllModuleT 在 DLL 应用程序中使用。为标准导出提供代码。
    CAtlExeModuleT 在 EXE 应用程序中使用。提供 EXE 中所需的代码。
    CAtlServiceModuleT 为创建 Windows NT 和 Windows 2000 服务提供支持。
    CComModule 仍然可用以便向后兼容。

分布 CComModule 功能的原因

由于以下原因,CComModule 的功能分布到了几个新类中:

  • 使 CComModule 中的功能呈粒状分割。
    对 COM、窗口化、接口调试和应用程序特定的(DLL 或 EXE)功能的支持现在在不同的类中。
  • 自动为这些模块的每一个声明全局实例。
    所需模块类的全局实例链接到项目中。
  • 消除了调用 Init 和 Term 方法的必要性。

本文关键:ATL的GUI程序设计(2)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top