存档

‘MFC 程序员的 WTL 教程’ 分类的存档
537 views

MFC 程序员的 WTL 教程 ( 10 ) — 实现一个拖放源

2010年1月4日

链接:上一部分

第十部分 – 实现一个拖放源

内容

简介

拖放是许多流行应用的特性之一。尽管实现一个放下目标相当简单,但拖动源却要复杂的多。MFC 中有两个类 COleDataObjectCOleDropSource 可以帮助管理拖动源所必须提供的数据,但 WTL 中没有这种辅助类。对于我们这些 WTL 用户来说,幸运的是,Raymond Chen 在 2000 年的时候在 MSDN 上写过一篇文章(“The Shell Drag/Drop Helper Object Part 2”),其中有 IDataObject 的纯 C++ 实现,这对于为 WTL 应用编制一个完整的拖放源提供了巨大的帮助。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , , ,

518 views

MFC 程序员的 WTL 教程 ( 9 ) — GDI 类, 公用对话框以及工具类

2010年1月4日

链接:上一部分下一部分

第九部分 – GDI 类,公用对话框以及工具类

内容

  • 简介
  • GDI 封装类
    • 封装类里的公用函数
    • 使用 CDCT
    • 与 MFC 封装类的差异
  • 资源加载函数
  • 使用公用对话框
    • CFileDialog
    • CFolderDialog
  • 其他有用的类和全局函数
    • Struct 的封装
    • 处理双类型参数的类
    • 其他工具类
    • 全局函数
  • 示例工程
  • 版权和许可
  • 修订历史

简介

WTL 里包含了好多封装类和工具类,而直到现在也还没有在本系列里进行过全面的介绍,比如说 CStringCDC。WTL 具有一个封装 GDI 对象的良好体系,一些用以加载资源的便利函数,以及更便于使用某些 Win32 公用对话框的类。在此第九部分里,我将介绍一些使用最广泛的类。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , , , ,

366 views

MFC 程序员的 WTL 教程 ( 8 ) — 属性表和向导

2010年1月4日

链接:上一部分下一部分

第八部分 – 属性表和向导

内容

  • 简介
  • WTL 属性表类
    • CPropertySheetImpl 的方法
  • WTL 属性页类
    • CPropertyPageWindow 的方法
    • CPropertyPageImpl 的方法
    • 处理通知消息
  • 创建一个属性表
    • 永远最简单的属性表
    • 创建一个有用的属性页
    • 创建一个更好的属性表类
  • 创建一个向导
    • 添加更多的页,处理 DDV
  • 其他的 UI 考虑
    • 居中属性表
    • 为属性页添加图标
  • 下一步
  • 修订历史

简介

甚至于在 Windows 95 把属性表引入为公用控件之前,它就已经成为了呈现选项的一种颇为流行的方法了。向导通常用于指导用户通历软件的安装过程或者其他的复杂工作。WTL 对创建这两种类型的属性表都提供了良好的支持,并允许你使用前 面介绍过的所有的那些对话框相关的特性,比如说 DDX 和 DDV。在本章里,我会演示创建一个基本的属性表和向导,以及如何处理由表发送出的事件和通知消息。

阅读全文…

MFC 程序员的 WTL 教程, WTL , ,

516 views

MFC 程序员的 WTL 教程 ( 7 ) — 分割条窗口

2010年1月4日

链接:上一部分下一部分

第七部分 – 分割条窗口

内容

  • 简介
  • WTL 分割条窗口
    • 创建一个分割条
    • 基本方法
    • 数据成员
  • 开始示例工程
  • 在窗格中创建窗口
    • WS_EX_CLIENTEDGE 的影响
  • 消息路由
  • 窗格容器
    • 基本方法
    • 在分割条窗口中使用窗格容器
    • 关闭按钮以及消息处理
  • 高级分割条特性
    • 嵌套分割条
    • 在窗格中使用 ActiveX 控件
    • 特殊绘制
  • 窗格容器中的特殊绘制
  • 奖励:状态栏中的进度条
  • 下一步
  • 参考资料
  • 修订历史

简介

自从 Windows 95 的资源管理器以其文件系统的双窗格视图粉墨登场以来,分割条窗口就成了一个流行的 UI 元素。MFC 中有一个复杂而强大的分割条窗口类,但是学会如何使用它却有点困难,而且它关联于文档/视图框架。在本部分里,我将探讨 WTL 的分隔条窗口,与 MFC 的分割条窗口相比没那么复杂。尽管 WTL 分隔条的实现没有 MFC 的特性丰富,但它却极其易于使用和扩展。

本章的示例工程是对 ClipSpy 的重新实现,当然,是使用了 WTL 而不是 MFC。如果你对该程序不熟悉,现在可以先浏览一下相关的文章,因为在这儿我会复制 ClipSpy 中的功能,但不会提供其工作原理的深入解释。本文主要聚焦于分割条窗口而不是剪贴板。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , , ,

494 views

MFC 程序员的 WTL 教程 ( 6 ) — 宿纳 ActiveX 控件

2010年1月4日

链接:上一部分下一部分

第六部分 – 宿纳 ActiveX 控件

内容

  • 简介
  • 以 AppWizard 开始
    • 创建工程
    • 生成的代码
  • 使用资源编辑器添加控件
  • 用于宿纳控件的 ATL 类
    • CAxDialogImpl
    • AtlAxWin 和 CAxWindow
  • 调用控件的方法
  • 接收控件激发的事件
    • 在 VC 6 里添加处理器
    • 在 VC 7 里添加处理器
    • 事件的知会
      • VC 6 里的知会
      • VC 7 里的知会
  • 示例工程概述
  • 运行时创建 ActiveX 控件
  • 键盘处理
  • 下一步
  • 修订历史

简介

在这第六部分里,我将介绍 ATL 对在对话框中宿纳(hosting)ActiveX 控件的支持。由于 ActiveX 控件是 ATL 的专项,所以这儿并没有相关的 WTL 类。不过,因为 ATL 宿纳控件的方式与 MFC 迥异,所以这是我们要介绍的一个重要主题。我会介绍如何宿纳控件以及接收(sink)事件,并开发一个相比用 MFC 的 ClassWizard 写就的应用毫无功能损失的应用程序。当然,你可以在你写的 WTL 应用中使用 ATL 对控件宿纳的支持。

阅读全文…

Internet Explorer Programming, MFC 程序员的 WTL 教程, WTL , , ,

613 views

MFC 程序员的 WTL 教程 ( 5 ) — 高级对话框 UI 类

2010年1月4日

链接:上一部分下一部分

第五部分 – 高级对话框 UI 类

内容

  • 第五部分简介
  • 属主绘制(Owner Draw)以及定制绘制(Custom Draw)的专用类
    • COwnerDraw
    • CCustomDraw
  • 新的 WTL 控件
    • CBitmapButton
    • CCheckListViewCtrl
    • CTreeViewCtrlEx 和 CTreeItem
    • CHyperLink
  • 对话框控件的 UI 更新
  • DDV
    • 处理 DDV 失败
  • 改变对话框的大小
  • 下一步
  • 参考资料
  • 修订历史

第五部分简介

在上一部分里,我们了解了一些关于对话框和控件的 WTL 特性,其工作方式与 MFC 中的对应类很相似。在本部分里,我们会介绍几个新的 WTL 类,它们实现了一些更加高级的 UI 特性:属主绘制(Owner draw)和定制绘制(Custom draw),新的 WTL 控件,UI 更新,以及对话框数据验证(DDV)。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , , , ,

635 views

MFC 程序员的 WTL 教程 ( 4 ) — 对话框和控件

2010年1月4日

链接:上一部分下一部分

第四部分 – 对话框和控件

内容

  • 简介
  • 重温 ATL 对话框
  • 通用控件封装类
  • 使用 AppWizard 创建基于对话框的应用
  • 使用控件封装类
    • ATL 方法 1 – 附着到 CWindow
    • ATL 方法 2 – CContainedWindow
    • ATL 方法 3 – 子类化
    • WTL 方法 1 – DDX_CONTROL
    • WTL 方法 2 – DDX_CONTROL_HANDLE
  • 更多 DDX 的内容
    • DDX 宏
    • 关于 DoDataExchange() 的更多信息
    • 使用 DDX
  • 处理来自控件的通知
    • 在父窗口中处理通知
    • 反射通知
      • 用于处理反射消息的 WTL 宏
  • 拾零
    • 对话框字体
    • _ATL_MIN_CRT
  • 修订历史

第四部分简介

对话框和控件是 MFC 确确实实节省你时间和精力的一个地方。如果没有 MFC 的控件类,你就会被淹没在填充结构以及写下成吨的 SendMessage 调用以管理控件的琐事中。而且 MFC 还提供了对话框数据交换(DDX),可以在控件和变量之间传递数据。WTL 也支持所有这些特性,并且在其通用控件的封装类里还加入了一些改进。在本文中,我们致力于一个基于对话框的应用,它演示了你所使用过的 MFC 特性,以及一些 WTL 在消息处理上的增强。高级 UI 特性以及 WTL 中的新控件将在第五部分里介绍。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , ,

579 views

MFC 程序员的 WTL 教程 ( 3 ) — 工具栏和状态栏

2010年1月4日

链接:上一部分下一部分

第三部分 – 工具栏和状态栏

内容

  • 第三部分介绍
  • 框架中的工具栏和状态栏
  • AppWizard 为工具栏和状态栏生成的代码
    • CMainFrame 如何创建栏
    • 显示或者隐藏栏
    • 栏的内建特性
    • 使用不同的风格创建工具栏
  • 工具栏编辑器
  • 工具栏按钮的 UI 更新
    • 启用工具栏 UI 更新
  • 用复用栏代替平实的工具栏
  • 多窗格状态栏
    • 窗格的 UI 更新
  • 下一步:关于对话框的一切
  • 参考资料
  • 修订历史

第三部分介绍

从在 Windows 95 中被作为通用控件开始,使用工具栏和状态栏已经成为了平常事。MFC 对多浮动工具栏的支持也对他们的流行起了推波助澜的作用。在后来的通用控件升级中,复用栏(Rebar,或者最初被称为的酷栏,coolbar)又为如何呈现工具栏增添了新的途径。在这一部分里,我会涵盖以下知识,WTL 如何对这些种类的栏进行支持以及如何在自己的应用中使用它们。

阅读全文…

MFC 程序员的 WTL 教程, WTL , ,

460 views

MFC 程序员的 WTL 教程 ( 2 ) — WTL 中的 GUI 基础类

2010年1月4日

链接:上一部分下一部分

第二部分 – WTL 中的 GUI 基础类

内容

  • 第二部分介绍
  • WTL 综述
  • 开始一个 WTL EXE
  • WTL 消息映射的增强
  • 使用 WTL AppWizard 可以得到什么
    • 通历向导(VC 6)
    • 通历向导(VC 7)
    • 检查生成的代码
  • CMessageLoop 内幕
  • CFrameWindowImpl 内幕
  • 回到时钟程序
  • UI 更新
    • 控制时钟的新菜单项
    • 调用 UIEnable()
  • 关于消息映射的最后注意事项
  • 下一站,1995
  • 修订历史

第二部分介绍

好,是实实在在地讲述 WTL 的时候了!在这部分里,我会介绍写一个主框架窗口的基础知识,以及 WTL 引入的比较受欢迎的改进,比如 UI 更新和更好的消息影射。为了最大程度地掌握本部分的内容,你应该安装 WTL 以使其头文件处于 VC 的搜索路径中,而且 AppWizard 也在适当的目录下。WTL 的分发包中附有如何安装 AppWizard 的说明,请参考该文档。

阅读全文…

MFC 程序员的 WTL 教程, WTL , ,

573 views

MFC 程序员的 WTL 教程 ( 1 ) — ATL 中的 GUI 类

2010年1月4日
链接:下一部分

第一部分 – ATL 中的 GUI 类

本章内容

  • README.TXT
  • 本系列介绍
  • 第一部分介绍
  • ATL 背景知识
    • ATL 和 WTL 的历史
    • ATL 风格的模板
  • ATL 窗口类
  • 定义窗口实现
    • 填充消息映射
  • 高级消息映射链和嵌入(Mix-in)类
  • ATL EXE 的结构
    • VC 6 的情形
    • VC 7 的情形
  • ATL 中的对话框
  • 就要到 WTL 了,我保证!
  • 修订历史

README.TXT

在继续或者在本文的讨论板块中发布帖子之前,我希望你能先阅读以下内容。

本系列原来是为 VC 6 用户写的,介绍 WTL 7.0 的内容。现在 VC 8 已经出来了,我觉得也到了更新本系列来介绍 VC 7.1 的时候了。;)(不过,VC 7.1 的从 6 到 7 的自动转换工作并不是总能平滑地完成,所以 VC 7.1 的用户在试着使用示例源代码的时候可能会遭遇失败)因而,我将继续下去,持续更新本系列。文章将更新到可以反映 WTL 7.1 的特性,并会在下载的源代码中包括 VC 7.1 的工程。

针对 VC 2005 用户的重要提示:VC 2005 的 Express 版本并附带 ATL 或者 MFC,因此不能使用此版本编译 ATL 或者 WTL 工程。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , ,