65.9K
CodeProject 正在变化。 阅读更多。
Home

Pocket PC 2002 中的属性表回调

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (7投票s)

2003 年 5 月 26 日

CPOL

3分钟阅读

viewsIcon

129238

downloadIcon

220

如何在 Pocket PC 属性表中使用 MFC 插入标题和页脚链接

Sample Image - CePropertySheet.jpg

引言

本文介绍了 Pocket PC 2002 属性表的一个鲜为人知的特性:如何包含带有链接的标题和页脚。标题和页脚都将显示在属性表的所有页面中。本文还演示了如何像标准 CDialog 一样隐藏应用程序菜单栏。

回调

标题和页脚都是通过 MFC 处理的所有属性表中都存在的回调函数实现的,通过 CPropertySheet。回调函数地址存储在 CPropertySheetm_psh 成员中存储的 PROPSHEETHEADER 结构的 pfnCallback 成员中。创建属性表时,MFC 将使用其自身的处理程序 AfxPropSheetCallback 的地址填充此指针。此回调处理 PSCB_INITIALIZEDPSCB_GETVERSION 消息。 这是将选项卡放在底部并报告属性表正在使用的控件版本所必需的。 但是,我们可以通过此回调做更多的事情:我们可以使用它来插入标题和页脚,就像演示项目中的属性表一样(请参见图片)。

为了访问这些功能,我们必须在回调中处理 PSCB_GETTITLEPSCB_GETLINKTEXT 消息。问题是 MFC 已经为属性表提供了一个回调,那么我们如何提供自己的回调函数呢?答案很简单:我们钩住它。

CCePropertySheet

所有相关代码都在 CCePropertySheet 类中。此类派生自 MFC 的 CPropertySheet,并在以下方面专门化其功能

  • 提供标准 CCeCommandBar;
  • 插入从构造函数参数中获取的标题;
  • 允许用户插入带有可选链接的页脚。

使用 CCePropertySheet

使用此类非常简单

CLinkSheet    dlg(_T("Link"));

dlg.SetLink(_T("Start <file:pword.exe{Word}>"));
dlg.DoModal();

第一行声明对象(派生自 CCePropertySheet)。 第二行设置页脚链接文本。 最后,调用对话框。

实现 CCePropertySheet

正如您可以从源代码中看到的那样,该类并不复杂。

我们要做的第一件事是钩住回调函数(请参见 HookCallback)。 此函数是从构造函数中调用的,我们在构造函数中将工作表的标题存储在静态 CString 中。 调用 HookCallback 时,MFC 已经将其自身的回调函数指针存储在 m_psh.pfnCallback 中。 该指针存储在静态成员中,并由该类自身的回调替换。

提供回调非常简单。 检查并提供标题和链接消息。 始终调用 MFC 回调来处理消息,因此我们保留了所有已知的功能。 提供消息意味着将特定字符串复制到 lParam 给定的地址。

最后,OnInitDialog 处理程序用于创建空的 CCeCommandBar。 除了隐藏应用程序的命令栏外,这还可以用作常规命令栏,这意味着您可以插入菜单和按钮。

请注意,m_strLinkm_strTitle 都是静态成员变量。 这是必需的,因为它们都由必须是静态的回调函数引用(不会在参数列表中接收隐式 this)。 另外,请注意,这些变量仅在属性表创建周期内访问一次。 如果需要创建第二个属性表作为第一个属性表发出的命令的结果,则可以确定重写的字符串值不会对第一个属性表产生影响。

谢谢

© . All rights reserved.