创建组件的属性页

在网络配置子系统调用 notify 对象的 INetCfgComponentPropertyUi::MergePropPages 方法后,notify 对象创建自定义属性页。 可以使用 MergePropPages 方法将自定义属性页合并到组件的属性表的默认页集。 MergePropPages 将返回适当数目的默认页,自定义页面可以合并到其中。

为了创建自定义属性页, MergePropPages 调用 COM CoTaskMemAlloc 函数,为 PROPSHEETPAGE 结构的句柄分配内存。 其中每个句柄都表示要创建的属性页。 如果 CoTaskMemAlloc 成功为句柄分配内存, MergePropPages 将声明并填充每个属性页的 PROPSHEETPAGE 结构。 在 MergePropPages 填充这些结构后,它会为每个属性页调用 Win32 CreatePropertySheetPage 函数。 在此调用中, MergePropPages 传递要创建的 PROPSHEETPAGE 结构的地址。

还应为 MergePropPages 创建的每个属性页实现对话框回调函数。 对话框回调函数处理操作系统发送到与该对话框函数关联的属性页的消息。 若要将属性页与对话框函数相关联, MergePropPages 应将每个页面的每个 PROPSHEETPAGE 结构的 pfnDlgProc 成员指向该页的对话框函数。

对话框函数处理以下消息:

  • WM_INITDIALOG消息,该消息在操作系统显示其关联的属性页之前立即发送到对话框函数。 对话框函数通常使用此消息来初始化属性页并执行影响属性页外观的任务。

  • WM_NOTIFY消息,该消息在属性页中发生事件后发送到对话框函数。 随此消息一起发送的其他信息标识发生了哪些事件。 此事件信息包含在指向 NMHDR 结构的指针中。 NMHDR 可以为属性表包含的信息包括,例如:

    • PSN_APPLY 事件,指示用户在属性页上单击“确定”、“关闭”或“应用”。 如果用户单击“确定”、“关闭”或“应用”,对话框函数可以调用 PropSheet_Changed 宏,以通知属性表页中的信息已更改。 在此调用中,对话框函数将句柄传递给属性表和页面。 对话框函数可以调用 Win32 GetParent 函数,并将句柄传递给页面以检索属性表的句柄。

      对话框函数通知属性表更改后,网络配置子系统调用 INetCfgComponentPropertyUi::ValidateProperties 方法以检查所有更改的有效性。 如果所有更改都有效,子系统将调用 notify 对象的 INetCfgComponentPropertyUi::ApplyProperties 方法,使所有更改生效。 在操作系统关闭对话框之前,网络配置子系统调用 ApplyProperties

      可以实现 ApplyProperties 方法以检索用户输入的信息并将信息设置为通知对象的数据成员。

    • PSN_RESET 事件,指示操作系统即将销毁属性页。 用户可以单击属性页上的“取消”来启动此操作。 如果用户单击“取消”,网络配置子系统将调用 INetCfgComponentPropertyUi::CancelProperties 方法,以忽略所有更改。 关闭对话框之前,网络配置子系统会调用 CancelProperties

    • PSN_KILLACTIVE 事件,指示属性页即将变为非活动状态。 当用户激活另一个页面或单击“确定”时,会发生此事件。

还可以为 MergePropPages 创建的每个属性页实现属性页回调函数。 属性页回调函数对页面执行初始化和清理操作。 若要将属性页与属性页回调函数相关联, MergePropPages 应将每个页面的每个 PROPSHEETPAGE 结构的 pfnCallback 成员指向该页的属性页回调函数。

有关以下内容的详细信息,请参阅Microsoft Windows SDK文档

  • 为属性页创建属性页和结构、函数和通知

  • 对话框回调过程、消息和结构