IMAPIFormAdviseSink::OnActivateNext

适用于:Outlook 2013 | Outlook 2016

指示窗体是否可以处理要显示的下一条消息的邮件类。

HRESULT OnActivateNext(
  LPCSTR lpszMessageClass,
  ULONG ulMessageStatus,
  ULONG ulMessageFlags,
  LPPERSISTMESSAGE FAR * ppPersistMessage
);

参数

lpszMessageClass

[in]指向下一条消息的消息类的指针。

ulMessageStatus

[in]从 PR_MSG_STATUS 复制的客户端定义标志或提供程序定义的标志的位掩码, (PidTagMessageStatus) 要显示的下一条消息的属性,该属性提供有关包含消息的内容表的状态信息。

ulMessageFlags

[in]指向从 PR_MESSAGE_FLAGS 复制的标志位掩码的指针, (PidTagMessageFlags) 要显示的下一条消息的属性,该属性指示消息的当前状态。

ppPersistMessage

[out]指向用于新窗体的表单对象的 IPersistMessage 实现(如果需要新窗体)的指针。 如果当前窗体对象可用于显示和保存下一条消息,则可以返回指向 NULL 的指针。

返回值

S_OK

通知成功,表单可以处理下一条消息。

S_FALSE

窗体不处理下一条消息的邮件类。

备注

表单查看者调用 IMAPIFormAdviseSink::OnActivateNext 方法来帮助表单确定是否可以在文件夹中显示下一封邮件。 下一条消息可以是任何类的消息,但通常是同一类或相关类的消息。 这使得客户端应用程序能够尽可能重用表单对象,从而更高效地读取同一类的多个消息。

大多数表单对象将使用 lpszMessageClass 参数指向的消息类来确定它们是否可以处理下一条消息。 通常,除了属于默认类的消息外,窗体还可以处理属于其默认类的类的消息。 但是,表单可以使用其他因素来确定是否可以处理消息,例如下一条消息的已发送或未发送状态。

针对实现者的说明

如果窗体可以处理消息类,则返回 ppPersistMessage 参数中的S_OK和 NULL。 如果窗体可以创建可以处理窗体无法处理的消息的新窗体,请执行以下步骤:

  1. 调用窗体的类工厂以创建新窗体对象的实例。

  2. 将实例存储在 ppPersistMessage 指针参数的内容中。

  3. 返回S_OK。

表单查看器将使用属于 ppPersistMessage 指向的对象的 IPersistMessage::Load 方法 加载消息。

如果可以创建的窗体和窗体都无法处理下一条消息,则返回 S_FALSE。 但是,一般情况下,窗体不应返回此值,因为它会导致表单查看器的性能下降。

MFCMAPI 引用

有关 MFCMAPI 示例代码,请参阅下表。

文件 函数 Comment
MAPIFormFunctions.cpp
CMyMAPIFormViewer::ActivateNext
MFCMAPI 使用 IMAPIFormAdviseSink::OnActivateNext 方法实现 IMAPIViewContext::ActivateNext 方法。

另请参阅

IMAPIViewContext::ActivateNext

IPersistMessage : IUnknown

IPersistMessage::Load

PidTagMessageFlags 规范属性

PidTagMessageStatus 规范属性

IMAPIFormAdviseSink : IUnknown

MFCMAPI 代码示例