WEB开发网
开发学院软件开发VC ATL的GUI程序设计(3) 阅读

ATL的GUI程序设计(3)

 2006-04-11 22:54:28 来源:WEB开发网   
核心提示: 猜想,还是猜想!请允许我在本章中不为你解释这个类的任何具体细节,ATL的GUI程序设计(3)(5),取而代之的是继续的猜想,因为, 不过,出于代码的兼容性以及WTL的内容考虑,这个类中需要解释的东西太多了,以至于我必须为它单独开辟一章

猜想,还是猜想!

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

  • 窗口类的注册是由这个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 方法的必要性。

    Init 和 Term 方法已移动到模块类的构造函数和析构函数中;不再需要调用 Init 和 Term。

不过,出于代码的兼容性以及WTL的内容考虑,本系列后续文章仍然将使用ATL 3.0中的CComModule。

上一页  1 2 3 4 5 

Tags:ATL GUI 程序设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接