OK和Apply Now按钮是相似的;都要引导属性表的页面来验证并应用用户所做的属性更改。唯一的区别是,选择“确定”按钮会导致属性表在应用更改后被销毁,但选择“立即应用”按钮不会。
当用户选择“确定”或“立即应用”按钮时,属性表将向活动页面发送PSN_KILLACTIVE通知消息,从而有机会验证用户的更改。如果页面确定更改有效,则应调用SetWindowLong 功能将页面的DWL_MSGRESULT值设置为FALSE。在这种情况下,属性表将向每个页面发送PSN_APPLY通知消息,指示它们将新属性应用于相应的项目。如果页面确定用户的更改无效,则应将DWL_MSGRESULT设置为TRUE,并显示一个通知用户问题的对话框。页面保持活动,直到它将DWL_MSGRESULT设置为FALSE以响应PSN_KILLACTIVE消息。应用程序可以使用PSM_APPLY消息来模拟“立即应用”按钮的选择。
当页面变为活动状态时,“立即应用”按钮最初被禁用,表示尚未应用任何属性更改。当页面通过其控件之一接收用户输入,指示用户已经编辑了一个属性时,页面应该将PSM_CHANGED消息发送到属性表。该消息导致属性表启用“立即应用”按钮。如果用户随后选择“立即应用”或“取消”按钮,该页面应重新初始化其控件,然后发送PSM_UNCHANGED消息再次禁用“立即应用”按钮。
有时“立即应用”按钮会导致页面更改属性表,并且无法撤消更改。发生这种情况时,页面应该将PSM_CANCELTOCLOSE消息发送到属性表。该消息导致属性表将OK按钮的文本更改为“关闭”,表示所应用的更改无法取消。
有时,页面会更改系统配置,要求Windows重新启动或系统重新启动,以便更改生效。进行此类更改后,页面会向属性表发送PSM_RESTARTWINDOWS或PSM_REBOOTSYSTEM消息。这些消息导致PropertySheet 功能在属性表销毁后返回ID_PSRESTARTWINDOWS或ID_PSREBOOTSYSTEM值。
当用户选择“取消”按钮时,属性表会将PSN_RESET通知消息发送到所有页面,表示属性表即将被销毁。页面应该使用通知执行清理操作。