借助C++进行Windows开发:Windows Template Library 8.0

目录

任务对话框

Aero 向导

新的文件对话框

有待探索的其他 WTL 功能

负责 Windows Template Library (WTL) 的开发人员最近发布了最新版本,这个模板库非常优秀,完全支持随 Windows Vista 引入的几乎所有新用户界面功能和增强功能。本月,我将重点介绍此最新版本中的一些新功能。如果您尚不熟悉 WTL 以及它与 Visual C++ 开发领域之间的适应情况,我在开头将简单地加以介绍。

为了能够轻松创建 COM 客户端和服务器,同时尽可能生成最小、最快的代码,Visual C++ 团队开发了活动模板库 (ATL)。与 MFC 不同,ATL 从设计之初就支持 COM 开发,并且做得很好;而 MFC 注重开发用户界面应用程序,仅在后期添加了对 COM 的支持。ATL 只支持基本的用户界面开发,但它提供的类可用作更高级的用户界面库的轻型构建块和基类,其作用非同小可。

WTL 对 ATL 进行了扩展,提供了大量用于构建应用程序的类模板,您想有多简单就有多简单,想有多复杂就有多复杂。WTL 并未随 Visual C++ 提供,但可以通过 SourceForge 网站 sourceforge.net/projects/wtl 和 Microsoft 下载中心获取。

WTL 8.0 的主要开发重点是 Windows Vista UI 支持,所以我会谈及我在前几期专栏和文章中讨论的一些主题。不过,本月的重点是 WTL 的最新改进如何促进对这些新功能的采用,并确保进一步减少需要您亲自编写的代码!《MSDN 杂志》网站提供此专栏的下载,下载内容中提供了本文介绍的大多数功能的示例。

任务对话框

任务对话框是 Windows Vista 中我最喜爱的新功能之一,它提供了功能强大的 API,只凭少许努力便可开发出简单对话框和高级对话框。

TaskDialogIndirect 函数和 TASKDIALOGCONFIG 结构可能令人生畏,确实需要借助 C++ 的一些帮助来简化其使用。WTL 通过 CTaskDialogImpl 基类模板提供对任务对话框的支持。CTaskDialogImpl 类在内部使用 CTaskDialogConfig 类来封装 TASKDIALOGCONFIG 结构。如果需要直接访问该结构,可以通过公共变量 m_tdc 进行访问,但您不太可能需要它,因为 CTaskDialogImpl 类提供的相应成员函数已将其打包,这一点做得非常出色。另外提供的还有从 CTaskDialogImpl 派生的 CTaskDialog 具体类,用于十分简单的情形,但一般情况下,最好从 CTaskDialogImpl 派生一个类来实现任务对话框。

图 1 展示了一些任务对话框功能以及如何在 WTL 中利用它们。该示例设置了窗口标题、主要说明和内容文本说明。任务对话框支持多个附加的文本说明,但需要根据是否已构造任务对话框来采用不同的机制设置这些文本说明。遗憾的是,CTaskDialogImpl 类没有概括出这些不同之处,使得更新这些文本说明有点令人迷惑。图 2 根据文本说明是在构造任务对话框之前还是之后设置的,概括介绍了如何使用 CTaskDialogImpl 类来设置各种文本说明。更新这些说明的常用方法是,在任务对话框的构造函数中使用预构造方法,而在各种事件处理程序中使用后构造方法。

Figure2更新任务对话框说明

文本说明 预构造 后构造
窗口标题 SetWindowTitle() ::SetWindowText()
主要说明 SetMainInstructionText() SetElementText(TDE_MAIN_INSTRUCTION, ...
具体内容 SetContentText() SetElementText(TDE_CONTENT, ...
脚注 SetFooterText() SetElementText(TDE_FOOTER, ...
展开的信息 SetExpandedInformationText() SetElementText(TDE_EXPANDED_INFORMATION, ...
展开的控件文本 SetExpandedControlText() N/A
折叠的控件文本 SetCollapsedControlText() N/A
验证 SetVerificationText() N/A

Figure1任务对话框示例

enum
{
  Button_Save = 101,
  Button_DontSave,
};
class SampleDialog : public CTaskDialogImpl<SampleDialog>
{
public:
  SampleDialog()
  {
    SetWindowTitle(L"Title");
    SetMainInstructionText(L"Main instruction");
    SetContentText(L"Content");
    ModifyFlags(0, TDF_ALLOW_DIALOG_CANCELLATION |
            TDF_USE_COMMAND_LINKS);
    static TASKDIALOG_BUTTON buttons[] =
    {
      { Button_Save, L"&Save", },
      { Button_DontSave, L"Do&n't save", },
    };
    SetButtons(buttons,
          _countof(buttons));
  }
};

图 1任务对话框示例

时间: 2024-09-23 00:09:14

借助C++进行Windows开发:Windows Template Library 8.0的相关文章

借助C++进行Windows开发:Windows服务增强

目录 延迟自动启动服务 改进关机可预见性 失败操作和受控停止 减少权限 保护服务数据 用受限令牌保护其他项目 接收服务通知 后续内容 Windows服务开发的状态自从在 Windows NT 中出现服务以来一直没有较大的改变,但是 Windows Vista 和 Windows Server 2008 打破了这一僵局.这其中的许多功能主要是为了以更简捷的方式生成更安全的服务,但是在与安全性不相关的服务功能中,有些功能是为了提高 Windows 的整体响应能力和可靠性. 延迟自动启动服务 可通过

借助C++进行Windows开发:Windows Imaging Component基础知识

目录 入门 解码图像 编码图像 WIC 图像工厂 使用流 通过 WPF 使用 WIC 下一步是什么? Microsoft Windows Imaging Component (WIC) 是用于编码.解码和操控图像的可扩展框架.WIC 最初是为 Windows Vista 和 Windows Presentation Foundation (WPF) 而设计的,但现在,不仅 Windows Vista 和 Microsoft .NET Framework 3.0 及更高版本附带此框架,而且它还是

借助 C++ 进行 Windows 开发:Windows 运行时应用程序模型

我们的生活充满了抽象.作为开发人员,如果我们不了解抽象的定义就去使用它,则通常会让我们 陷入困境.抽象有时是零散的,且无法完全隐藏基本复杂性.别误解我的意思,其实抽象是很有用的. 它们能为用户和开发人员提供帮助,而如果您深入研究您通常依赖的抽象来了解其运作方式,则会让您 受益匪浅.此外,承认这一现实的库通常比不承认这一现实的库更为成功,部分是因为前者允许您在必 要时绕过抽象. Windows 运行时 (WinRT) 就是一个这样的抽象,在本月的专栏中,我将通过研究 WinRT 核心应用 程序模型

基于Windows 7旗舰版搭建WinCE6.0开发环境的过程

      首先感谢JeffreyLi提供了更简便的安装WinCE6.0 R3的方法,今天验证过了,确实比我之前整理的<WinCE6.0 R3的安装步骤>方便很多,十分感谢!       为了方便大家参考,重新整理的安装步骤如下:  *         Please install the following software in order             Visual Studio 2005             Visual Studio 2005 Service Pack 

Go语言开发Windows应用

当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场.Go不是脚本语言,但却有着脚本语言的轻便简单的特性.相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了"动态语言的应用开发梦". Windows Api Windows桌面应用依赖于win api,画出各种应用界面和控件本质上就是调用windows提供的api.Go开发Windows App要做的第一件事情就是封装这些windows

微软现在使用 Git 和 GVFS 来开发 Windows

微软于今日宣布,当前该公司几乎所有工程师,都已经选择 Git 版本控制系统来开发其 Windows 操作系统.如果你检查一遍,会发现 Windows Git 资源库中已包含 350 万文件,总大小达到了 300GB 左右.需要指出的是,Git 本身并不是为了管理如此大型的项目而开发的,因此微软特地推出了"Git 虚拟文件系统"(简称 GVFS),关注过该公司开发者大会(//Build)的网友们应该不会对它感到陌生. GVFS 可以享受到 Git 的所有益处,且无需因为运行一条简单的 G

windows开发记事本程序纪实(二)逻辑篇1_其它综合

1. 主要内容 从本节开始介绍windows开发实现记事本程序的逻辑实现部分.本节的主要内容有以下3点: 1. 主窗口定义 -- 主要介绍记事本主界面窗口对应的窗口类及实现方案 2. RichEdit控件的选用及初始化 -- 记事本程序中编辑控件的选择及使用 3. 整个程序ICON的选择.-- 程序ICON设置 2. 实际开发 2.1 主窗口实现 在上一篇介绍界面的实现中只是给出了运行界面的效果,但是当时那个界面程序不能响应任何的windows消息,因为当时的窗口在创建时将窗口对应的过程处理函数

微软现使用 Git 和 GVFS 来开发 Windows

微软于今日宣布,当前该公司几乎所有工程师,都已经选择 Git 版本控制系统来开发其 Windows 操作系统.如果你检查一遍,会发现 Windows Git 资源库中已包含 350 万文件,总大小达到了 300GB 左右.需要指出的是,Git 本身并不是为了管理如此大型的项目而开发的,因此微软特地推出了"Git 虚拟文件系统"(简称 GVFS),关注过该公司开发者大会(//Build)的网友们应该不会对它感到陌生. Microsoft-Git-Virtual-File-System.j

qtcreator-新手关于移动开发 windows下Objective-C环境 和 SailfishOS的一些问题

问题描述 新手关于移动开发 windows下Objective-C环境 和 SailfishOS的一些问题 0.最近开始研究移动开发,最先是从IOS开始,因为本人是个应届生,所以用Mac是承受不起的 1.在谷歌搜索了下,于是在win7上安装了gnustep-msys-system和gnustep-core和gnustep-core,可以 在shell中进行Obj-C编程: 2.在搜索资料过程中,看到了SailfishOS,于是去研究了下,安装了SailfishOSSDK-Alpha-1312-Q