iTextRange::Move 方法 (tom.h)

将插入点向前或向后移动指定数量的单位。 如果范围是非退化的,则范围将折叠到任一端的插入点,具体取决于 Count,然后移动。

语法

HRESULT Move(
  long Unit,
  long Count,
  long *pDelta
);

参数

Unit

类型: long

要使用的单位。 默认值为 tomCharacter。 有关其他值的信息,请参阅 ITextRange 中的讨论。

Count

类型: long

要过去的 单位数。 默认值为 1。 如果 Count 大于零,则向前移动(接近故事末尾),如果 Count 小于零,则向后移动(向开头)。 如果 Count 为零,则范围保持不变。

pDelta

类型: long*

插入点经过的实际 单位数。 指针可以为 NULL。 有关详细信息,请参见“备注”部分。

返回值

类型: HRESULT

方法返回 HRESULT 值。 如果 方法成功移动插入点,则返回 S_OK。 如果方法失败,它将返回以下错误代码之一。 有关 COM 错误代码的详细信息,请参阅 COM 中的错误处理

返回代码 说明
E_NOTIMPL
不支持 Unit
S_FALSE
由于其他某种原因而失败。

注解

如果范围在) 插入点 (退化,此方法将尝试移动插入点 计数单位

如果范围为非生成值且 Count 大于零,此方法折叠结束字符位置处的区域,将生成的插入点向前移动到 单位 边界 ((如果尚未位于一个) ),然后尝试向前移动 Count - 1 Units。 如果区域为非生成值且 Count 小于零,此方法折叠起始字符位置处的区域,将生成的插入点向后移动到 单位 边界 ((如果尚未位于一) ),然后尝试移动 |计数|- 向后 1 个单位。 因此,在这两种情况下,将非退化范围折叠到插入点(无论是在折叠后移动到 Unit 的开始还是结束)都计为 Unit

ITextRange::Move 方法返回 pDelta = 实际移动的单位数。 此方法永远不会将插入点移出此范围的故事。 如果 CountUnits 会在故事开头之前移动插入点,则会将其移动到故事开头,并相应地设置 pDelta 。 同样,如果 CountUnit将它移到故事末尾之外,则会移动到故事末尾。

ITextRange::Move 方法的工作方式类似于面向 UI 的 MoveLeftMoveRight 方法,只不过运动方向是逻辑的,而不是几何方向。 也就是说,使用 ITextRange::移动 方向是接近故事的末尾或开头。 根据语言,向故事末尾移动可能向左或向右移动。 若要了解计数,请在 Microsoft Word文档中按 Ctrl+向右键进行各种选择。 在从左到右的文本中,此击键的行为与 Move(tomWord, 1)、 和 MoveRight(tomWord, 1)相同。 计数 对应于按 Ctrl+向右键的次数。

例如,如果按 Ctrl+向右键显示以下两个图中所示的选项,则最终会在字符位置 8 处出现插入点,因为此命令将折叠其结束字符位置 (7 和 8,分别) 并移动到下一 个 tomWord 边界。

文本字符串的字符位置文本字符串的字符位置 第一个选择不包括字符位置 7 处的空格,因此 Ctrl+向右键将经过空格移动到字符位置 8 处 的 tomWord 边界。 第二个选定内容的结束字符位置已位于 tomWord 边界处,因此 Ctrl+向右键将折叠该边界上的选定内容。 同样,对于此文本,Ctrl+向左键的作用类似于 Move(tomWord, -1),并且 MoveLeft(tomWord, 1) 折叠字符位置 5(已在 tomWord 边界处)的第一个选定内容,因此不会再发生动作。 但是 Ctrl+向左键折叠字符位置 4 处的第二个选定内容,然后移动到零,因为这是下一 个 tomWord 边界在运动方向。

返回参数 pDelta 设置为等于插入点移动的 Unit数,包括一个 用于 折叠非退化范围并将其移动到 Unit 边界的 Unit 。 因此,如果没有发生运动和折叠,因为当范围是故事末尾的插入点时, pDelta 设置为零。 此方法可用于控制处理整个故事的程序循环。

在上述两种情况下,调用 Move(tomWord, 1)pDelta 等于 1,因为范围已折叠。 同样,对于这两种情况,调用 Move(tomWord, -1)pDelta 等于 -1。 折叠(无论是否将 单元 的一部分移动到 单元 边界)将计为移动 的 Unit

运动方向是指纯文本后备存储中的逻辑字符排序。 此方法可避免国际软件中的几何顺序问题,例如左与右、向上与向下。 当然,编辑引擎中仍然需要这样的几何方法,因为键盘具有箭头键来调用它们。 如果该范围实际上是 ITextSelection 对象,则可以使用 MoveLeftMoveRight 等方法。

如果 Unit 指定 tomCharacter) (字符,则文本对象模型 (TOM) 使用 Unicode 字符集。 若要在 Unicode 和多字节字符集之间转换, MultiByteToWideCharWideCharToMultiByte 函数提供了在导入和导出时分别在 Unicode 和多字节字符集之间进行转换的简单方法。 有关详细信息,请参阅 打开。 在这种情况下,使用回车/换行符 (CR/LF) 分隔段落的问题与 DBCS) (双字节字符集一样有问题。 ITextSelection UI 方法在 CR/LF 上备份,就像它是一个字符一样,但 ITextRange::Move 方法将 CR/LFs 计数为两个字符。 使用单个字符作为段落分隔符显然更好,在 TOM 中,该分隔符由字符返回表示,尽管 Unicode 段落分隔符0x2029被接受。 通常,TOM 引擎应支持 CR/LF、回车 (CR) 、换行 (LF) 、垂直选项卡、表单源和0x2029。 Microsoft Rich Edit 2.0 还支持 CR/CR/LF 以实现向后兼容性。

另请参阅 ITextRange::MoveStartITextRange::MoveEnd 方法,它们分别移动范围 Start 或 End position CountUnits。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 tom.h
DLL Msftedit.dll

请参阅

概念性

ITextRange

MoveEnd

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

打开

其他资源

引用

文本对象模型

WideCharToMultiByte