实现进度指示器

适用于:Outlook 2013 | Outlook 2016

客户端启动的许多操作需要花费大量时间。 这些可能较长操作的输入参数之一是指向进度对象的指针 ,该对象实现 IMAPIProgress : IUnknown 接口。 进度对象控制进度指示器的外观和显示,由客户端和 MAPI 实现。 可以选择是否实现进度对象。 如果选择不提供实现,则 MAPI 实现可供服务提供商使用。

进度对象处理以下数据片段:

  • 当调用 IMAPIProgress::P rogress 方法时,全局最小值应小于或等于 ulValue 参数的值。 在操作开始时, ulValue 将等于此最小值。

  • 当调用 IMAPIProgress::P rogress 方法时,全局最大值应大于或等于 ulValue 参数。 在操作结束时, ulValue 将等于此最大值。

  • 一个标志值,该值指示进度是对应于顶级项还是较低级别项。

  • 一个 值,该值指示操作的当前进度级别。

  • 当前处理的项数相对于总数。

  • 操作期间要处理的项总数。

最小值和最大值以数字形式表示运算的开始和结束。 使用 1 作为初始最小值,使用 1000 作为初始最大值,将这些值传递给 IMAPIProgress::GetMinIMAPIProgress::GetMax 方法中的服务提供程序。 服务提供商在调用 IMAPIProgress::SetLimits 时重置这些值。

服务提供程序使用标志值来确定应如何设置其他值。 初始化标志值以MAPI_TOP_LEVEL并在 GetFlags 的实现中返回此值,直到服务提供商通过调用 SetLimits 来重置该值。

SetLimits 方法的实现中,保存每个参数的本地副本: lpulMinlpulMaxlpulFlags。 当服务提供商调用 GetMinGetMaxGetFlags 方法时,这些值应随时可用。

若要更新进度指示器的显示,服务提供商调用 IMAPIProgress::P rogress 方法。 此方法有三个参数:值、计数和总计。 使用第一个参数 ulValue 显示进度指示器。 ulValue 参数是进度指示器,仅在操作开始时等于全局 ulMin,仅在操作完成时等于全局 ulMax

使用第二个和第三个参数 ulCountulTotal(如果可用)显示可选消息,例如“完成 5 个项目(共 10 个)。如果第二个和第三个参数设置为 0,则可以选择是否直观地更改进度指示器。 某些服务提供商将这些参数设置为零,以指示他们正在处理子对象,其进度相对于父对象进行监视。 在这种情况下,仅当父对象报告进度时更改显示是有意义的。 某些服务提供商每次都为这些参数传递零。