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 方法查找表的开头。 |