IMAPIForm::ShutdownForm

适用于:Outlook 2013 | Outlook 2016

关闭表单。

HRESULT ShutdownForm(
  ULONG ulSaveOptions
);

参数

ulSaveOptions

[in]一个 值,该值控制在关闭窗体之前如何或是否保存窗体中的数据。 可以设置以下标志之一:

SAVEOPTS_NOSAVE

不应保存表单数据。

SAVEOPTS_PROMPTSAVE

系统应提示用户保存窗体中任何已更改的数据。

SAVEOPTS_SAVEIFDIRTY

如果表单数据自上次保存以来已更改,则应保存。 如果未显示任何用户界面,窗体可以选择性地切换到使用 SAVEOPTS_NOSAVE 选项的功能。

返回值

S_OK

窗体已关闭。

E_UNEXPECTED

该窗体已通过对 ShutdownForm 的先前调用关闭。

备注

表单查看者调用 IMAPIForm::ShutdownForm 方法以关闭窗体。

针对实现者的说明

ShutdownForm 的实现中执行以下任务:

  1. 检查查看器是否尚未调用 ShutdownForm,并返回E_UNEXPECTED(如果有)。 虽然这不太可能,但应检查。

  2. 调用表单的 IUnknown::AddRef 方法,以便表单和任何内部数据结构的存储在处理完成之前保持可用。

  3. 确定表单数据是否有任何未保存的更改。 通过调用查看者的 IMAPIMessageSite::SaveMessage 方法,根据 ulSaveOptions 参数的设置方式保存未保存的数据。

  4. 销毁窗体的用户界面窗口。

  5. 通过调用其 IUnknown::Release 方法释放表单的邮件和消息网站对象。

  6. 通过调用其 IMAPIViewAdviseSink::OnShutdown 方法通知所有注册的观看者挂起的关闭。

  7. 调用 IMAPIViewContext::SetAdviseSink 方法,通过将建议接收器指针设置为 null 来取消表单的通知注册。

  8. 调用 MAPIFreeBuffer 函数以释放窗体属性的内存。

  9. 调用表单的 IUnknown::Release 方法,与步骤 2 中进行的 AddRef 调用匹配。

  10. 返回S_OK。

注意

完成这些操作后,表单对象上唯一可以调用的有效方法是来自 IUnknown 接口的方法。

给调用方的说明

当 ShutdownForm 返回时,无论它是否返回错误,都通过调用其 IUnknown::Release 方法释放窗体。 可以放心地忽略 ShutdownForm 返回的任何错误。

另请参阅

IMAPIMessageSite::SaveMessage

IMAPIViewAdviseSink::OnShutdown

IMAPIViewContext::SetAdviseSink

MAPIFreeBuffer

IMAPIForm : IUnknown