IMAPITable::SeekRow

适用于:Outlook 2013 | Outlook 2016

将光标移动到表中的特定位置。

HRESULT SeekRow(
BOOKMARK bkOrigin,
LONG lRowCount,
LONG FAR * lplRowsSought
);

参数

bkOrigin

[in]标识查找操作的起始位置的书签。 可以使用 IMAPITable::CreateBookmark 方法创建书签,也可以传递以下预定义值之一。

BOOKMARK_BEGINNING

从表的开头开始查找操作。

BOOKMARK_CURRENT

从游标所在的表中的行启动查找操作。

BOOKMARK_END

从表末尾开始查找操作。

lRowCount

[in]要移动的行数的有符号计数,从 bkOrigin 参数标识的书签开始。

lplRowsSought

[out]如果 lRowCount 是输入上的有效指针, 则 lplRowsSought 指向在查找操作中处理的行数,其符号指示搜索方向(向前或向后)。 如果 lRowCount 为负值,则 lplRowsSought 为负值。

返回值

S_OK

查找操作成功。

MAPI_E_BUSY

另一个操作正在进行中,该操作阻止行查找操作启动。 应允许正在进行的操作完成,或者应停止该操作。

MAPI_E_INVALID_BOOKMARK

bkOrigin 参数中指定的书签无效,因为它已被删除或超出请求的最后一行。

MAPI_W_POSITION_CHANGED

调用成功,但在 bkOrigin 参数中指定的书签不再设置为与上次使用时相同的行。 如果尚未使用书签,则它不再与创建书签时的位置相同。 返回此警告时,应将调用处理为成功。 若要测试此警告,请使用 HR_FAILED 宏。 有关详细信息,请参阅 使用宏进行错误处理

备注

IMAPITable::SeekRow 方法为游标建立新的BOOKMARK_CURRENT位置。 lRowCount 参数指示游标移动的行数和移动方向。

如果生成的位置超出表的最后一行,则游标位于最后一行之后。 如果生成的位置位于表的第一行之前,则游标位于第一行的开头。

针对实现者的说明

如果表中不再存在 bkOrigin 指向的行,并且无法为书签建立新位置,则返回MAPI_E_INVALID_BOOKMARK。 如果指向by_bkOrigin_no的行存在时间较长,并且可以为书签建立新位置,则返回MAPI_W_POSITION_CHANGED。

仍可使用指向从表视图折叠的行的书签。 如果调用方尝试将光标移动到此类书签,请将光标移动到下一个可见行并返回MAPI_W_POSITION_CHANGED。

可以在使用时或折叠行时将折叠到视图中的位置的书签移动。 如果在折叠行时移动了书签,请在书签中保留一个位置,以指示书签自上次使用后是否移动,或者(如果从未使用过)自创建书签以来移动。

给调用方的说明

若要指示 SeekRow 的向后移动,请在 lRowCount 中传递负值。 若要搜索到表的开头,请在 lRowCount 中传递零,在 bkOrigin 中传递值BOOKMARK_BEGINNING。

如果表中存在大量行, SeekRow 操作可能会很慢。 如果需要在 lplRowsSought 参数的内容中返回行计数,性能也会受到影响。

SeekRow 返回 lRowCount 指向的变量中实际搜索的行数(正数或负数)。 在普通操作中,它应返回与为 lRowCount 传入的 lplRowsSought 相同的值,除非搜索到达表的开头或末尾。

不要将 lRowCount 设置为大于 50 的数字。 若要查找更多行,请使用 IMAPITable::SeekRowApprox 方法。

MFCMAPI 引用

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

文件 函数 Comment
MAPIProcessor.cpp
CMAPIProcessor::P rocessMailboxTable
MFCMAPI 在处理前使用 IMAPITable::SeekRow 方法查找表的开头。

另请参阅

IMAPITable::CreateBookmark

IMAPITable::FindRow

IMAPITable::QueryRows

IMAPITable::SeekRowApprox

IMAPITable : IUnknown

MFCMAPI 代码示例