当前位置:文档之家› Windows Vista for Developers-第一部分:Aero向导

Windows Vista for Developers-第一部分:Aero向导

Windows Vista for Developers-第一部分:Aero向导
Windows Vista for Developers-第一部分:Aero向导

Aero向导代表了由Windows 95系列操作系统最先引入的向导界面的最高发展水平。它给用户所常见的向导界面带来了一丝新意,能够更好地抓住用户的视线。在《Windows Vista for Developers》系列的第一部分中,我将演示如何用最少的代码将一个传统的向导更新为最新的Aero界面。

属性单(Property Sheets)

回忆一下,向导仅仅是一系列的由PROPSHEETHEADER结构定义的属性单,并由PropertySheet函数实现。ATL所提供的CPropertySheetImpl类模板已经为我们生成了大部分使用PropertySheet函数的代码。接下来就让我们从一个简单的属性单开始,然后将其“升级”为全新的Areo向导:

class SampleWizard :

public CPropertySheetImpl

{

public:

BEGIN_MSG_MAP(SampleWizard)

CHAIN_MSG_MAP(__super)

END_MSG_MAP()

SampleWizard() :

CPropertySheetImpl(IDS_TITLE)

{

VERIFY(AddPage(m_page));

}

private:

SamplePagem_page;

};

该SampleWizard类继承于上面提到的C PropertySheetImpl类模板,也就自动获取了基类提供的很多功能。message m ap简单地将消息传递给基类。构造函数调用了积累的构造函数,用来设置该向导的标题栏,并使用继承于C PropertySheetImpl的AddPage方法添加了一个简单的页。SamplePage类的定义如下:

class SamplePage :

public CPropertyPageImpl

{

public:

BEGIN_MSG_MAP(SamplePage)

CHAIN_MSG_MAP(__super)

END_MSG_MAP()

enum { IDD = IDD_SAMPLE_PAGE };

};

SamplePage类继承于CPropertyPageImpl类模板,它提供了属性页所需要的大部分功能。SamplePage的message m ap同样简单地将消息传递给基类。我们还需要为基类设置IDD(enum类型的常量),以便其甄别将用于属性页的对话框资源。

这时,我们即可用下面的代码创建并显示出一个模态属性单了:

SampleWizardsampleWizard;

sampleWizard.DoModal();

第一行创建了一个SampleWizard对象以及其多个基类的实例,其中之一就是生成调用PropertySheet函数所必须的那个结构体。第二行SampleWizard的DoModal方法(继承于CPropertySheetImpl类模板)负责调用PropertySheet函数。结果就是我们看到了如下的一个简单的属性单:

经典向导(Classic Wizards)

若想将属性单变为经典样式的向导,你所需要做的只是在SampleWizard构造函数中添加如下的语句:

m_psh.dwFlags |= PSH_WIZARD97;

上面这行代码将PSH_WIZARD97标记(flag)与PROPSHEETHEADER结构中现有的标记组合了起来。因为向导界面还包含有一个额外的标题区域,所以我们还需要修改SamplePage类,添加一段标题文本:

class SamplePage :

public CPropertyPageImpl

{

public:

BEGIN_MSG_MAP(SamplePage)

CHAIN_MSG_MAP(__super)

END_MSG_MAP()

enum { IDD = IDD_BLANK_PAGE };

SamplePage()

{

VERIFY(m_title.LoadString(IDS_PAGE_TITLE));

SetHeaderTitle(m_title);

}

private:

CStringm_title;

};

SamplePage构造函数使用继承于C PropertyPageImpl的SetHeaderTitle方法来设置标题区域。注意页的PROPSHEETPAGE结构保留了该字符串的指针,所以该字符串的生存周期必须超过这个构造函数。

简单修改过后,结果却大不相同:

可以看到,前面出现在选项卡上的文字现在出现在了窗口标题栏中。

Aero向导(Aero Wizards)

现在只要将SampleWizard构造函数中的PSH_WIZARD97替换为

PSH_AEROWIZARD,即可看到全新的Aero向导界面:

可以看到,窗口的标题又回来了,而原本出现在属性单选项卡上的对话框说明文字却不见了踪影。

新的消息(New Messages)

Aero向导还提供了一些新的消息,用来让我们能够更好地控制向导中的控件。

PSM_SHOWWIZBUTTONS消息用来显示或隐藏向导中的标准按钮。

PropSheet_ShowWizButtons宏可以帮你简单地发出这条消息。虽然使用起来并不是那么直观,但一旦掌握了也就不难了。PropSheet_ShowWizButtons虽然是个宏,但我们可以将其想象为一个函数:

void PropSheet_ShowWizButtons(HWND handle,

DWORD buttons,

DWORD mask);

handle参数用来甄别向导窗口的实例,buttons参数用来指定将要显示哪些按钮,mask参数则用来指定该宏将作用于哪些按钮上。若是某个按钮的标记同时出现在了buttons和mask参数中,那么将显示出该按钮。若某个按钮的标记只出现在了mask参数中,那么该按钮将隐藏。我们可以使用如下的按钮标记:

1.PSWIZB_BACK

2.PSWIZB_NEXT

3.PSWIZB_FINISH

4.PSWIZB_CANCEL

例如,如下代码将显示出Next按钮,并隐藏Back按钮:

PropSheet_ShowWizButtons(handle,

PSWIZB_NEXT,

PSWIZB_BACK | PSWIZB_NEXT);

PSM_ENABLEWIZBUTTONS消息用来启用或禁用某个标准按钮。

PropSheet_EnableWizButtons宏可以帮你简单地发出这条消息:

void PropSheet_EnableWizButtons(HWND handle,

DWORD buttons,

DWORD mask);

在区分按钮方面,这个宏的处理方法与PSM_SHOWWIZBUTTONS一样——buttons参数用来指定将要启用/禁用哪些按钮,mask参数则用来指定该宏将作用于哪些按钮上。例如,如下代码将启用Next按钮,并禁用Back按钮:

PropSheet_EnableWizButtons(handle,

PSWIZB_NEXT,

PSWIZB_BACK | PSWIZB_NEXT);

PSM_SETBUTTONTEXT消息用来修改Next、Finish和Cancel按钮上的文字。PropSheet_SetButtonText宏可以帮你简单地发出这条消息:

void PropSheet_SetButtonText(HWND handle,

DWORD button,

PCWSTR text);

示例程序

为了让你更容易地体验到Aero向导所提供的各种增强功能,我创建了一个简单的向导界面,可以在这里下载:https://www.doczj.com/doc/788404333.html,/kenny/vista/aerowizardsample.zip

相关主题
文本预览
相关文档 最新文档