MFC程序员的WTL指南: Part VIII - 属性页与向导

本文是MFC程序员使用WTL创建属性页和向导的指南,介绍了如何利用CPropertySheetImpl和CPropertyPageImpl创建属性表、处理通知消息、设置属性页的样式,以及创建向导样式的属性表。文中通过示例代码展示了如何添加和管理属性页,处理用户交互,以及调整界面效果。
摘要由CSDN通过智能技术生成

MFC程序员的WTL指南: Part VIII - 属性页与向导

原作 :Michael Dunn [英文原文]
翻译 :Orbit(桔皮干了) [www.winmsg.com]

下载演示程序代码

本章内容 介绍

甚至在成为Windows 95的通用控件之前,使用属性表来表示一些选项就已经成为一种很流行的方式。向导模式的属性表通常用来引导用户安装软件或完成其他复杂的工作。WTL对这两种方式的属性表都提供了很好的支持,可以使用前面介绍的与对话框相关的特性,如DDX和DDV。在本章我将演示如何创建一个基本的属性表和向导,如何处理属性页发送的通知消息和事件。

WTL 的属性表类

实现一个属性表需要CPropertySheetWindow和CPropertySheetImpl两个类联合使用,它们都定义在atldlgs.h头文件中。CPropertySheetWindow类是一个窗口接口类(也就是说是一个CWindow派生类),CPropertySheetImpl有消息映射链和窗口的完整实现,这和ATL的基本窗口类相似,它需要CWindow和CWindowImpl两个类联合使用。

CPropertySheetWindow类封装了对各种PSM_* 消息的处理,例如,SetActivePageByID()封装了PSM_SETCURSELID消息。CPropertySheetImpl类管理一个PROPSHEETHEADER结构和一个HPROPSHEETPAGE类型的数组,CPropertySheetImpl类还提供了
一些方法用来填充PROPSHEETHEADER结构,添加或删除属性页,你也可以使用m_psh成员变量直接操作PROPSHEETHEADER结构。

最后,CPropertySheet类是CPropertySheetImpl类的一个特例,你可以直接使用它而不需要定制整个属性表。

CPropertySheetImpl 的方法


下面是CPropertySheetImpl类的一些重要方法。由于许多方法仅仅是对窗口消息的封装,所以就不在这里列出,你可以查看atldlgs.h中完整的函数清单。

CPropertySheetImpl(_U_STRINGorID title = (LPCTSTR) NULL,
                   UINT uStartPage = 0, HWND hWndParent = NULL)

CPropertySheetImpl类的构造函数允许你使用一些常用的属性(默认值),所以就不需要在调用其他的方法设置它们。title指定显示在属性表的标题栏的文字,_U_STRINGorID是一个WTL的工具类,它可以自动转换LPCTSTR和资源ID,例如,下面的两行代码都是正确的:

  CPropertySheetImpl mySheet ( IDS_SHEET_TITLE );
  CPropertySheetImpl mySheet ( _T("My prop sheet") );

IDS_SHEET_TITLE 是字符串的ID。 uStartPage 是属性表启动时激活的属性页,是一个从0开始的索引。hWndParent 是属性表的父窗口的句柄。

BOOL AddPage(HPROPSHEETPAGE hPage)
BOOL AddPage(LPCPROPSHEETPAGE pPage)

添加一个属性页。如果这个属性页已经创建了,你可以使用第一个重载函数,使用属性页的句柄(HPROPSHEETPAGE)作为参数。通常是使用第二个重载函数,使用这个重载函数只需设置一个PROPSHEETPAGE数据结构(后面会讲到,它和CPropertyPageImpl一起协同工作),CPropertySheetImpl会为你创建并管理这个属性页。

BOOL RemovePage(HPROPSHEETPAGE hPage)
BOOL RemovePage(int nPageIndex)

移除一个属性页,可以使用属性页的句柄或索引。

BOOL SetActivePage(HPROPSHEETPAGE hPage)
BOOL SetActivePage(int nPageIndex)

设置属性表的活动页面。可以使用属性页的句柄或索引。你可以在属性表创建(显示)之前使用这个方法动态的设置处于激活的属性页。

void SetTitle(LPCTSTR lpszText, UINT nStyle = 0)

使之属性表窗口的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值