如何使用 RTF 文本操作

应用程序可以发送信息,以检索或查找 Rich Edit 控件中的文本。 可以检索所选文本或指定范围的文本。

要获取 Rich Edit 控件中的选定文本,请使用 EM_GETSELTEXT 消息。 文本将复制到指定的字符数组。 必须确保数组足够大,足以容纳所选文本以及终止 null 字符。

要检索指定范围的文本,请使用 EM_GETTEXTRANGE 消息。 与该信息一起使用的 TEXTRANGE 结构指定了要检索的文本范围,并指向一个接收文本的字符数组。 同样,应用程序必须确保数组的大小足以容纳指定的文本和一个终止 null 字符。

可以使用 EM_FINDTEXTEM_FINDTEXTEX 消息,或其 Unicode 等效消息 EM_FINDTEXTWEM_FINDTEXTEXW 在 Rich Edit 控件中搜索字符串。 与非扩展版本一起使用的 FINDTEXT 结构指定了要搜索的文本范围和要搜索的字符串。 扩展版本使用 FINDTEXTEX 结构,该结构指定了相同的信息,还会接收找到的文本字符范围的起点和终点。 还可以指定此类选项,例如搜索是否区分大小写。

需要了解的事项

技术

先决条件

  • C/C++
  • Windows 用户界面编程

说明

使用 Rich Edit 文本操作

以下示例函数在支持 Unicode 的 Rich Edit 控件中的选定文本内查找指定的文本。 如果找到目标,它就会成为新的选择。

BOOL FindTextInSelection(HWND hRich, WCHAR* target)
{
    CHARRANGE selectionRange;
    
    SendMessage(hRich, EM_EXGETSEL, 0, (LPARAM)&selectionRange);
    
    FINDTEXTEX ftex;
    
    ftex.lpstrText  = target;
    ftex.chrg.cpMin = selectionRange.cpMin;
    ftex.chrg.cpMax = selectionRange.cpMax;
    
    LRESULT lr = SendMessage(hRich, EM_FINDTEXTEXW, (WPARAM)FR_DOWN, (LPARAM) &ftex);
    
    if (lr >= 0)
    {
        LRESULT lr1 = SendMessage(hRich, EM_EXSETSEL, 0, (LPARAM)&ftex.chrgText);
        
        SendMessage(hRich, EM_HIDESELECTION, (LPARAM)FALSE, 0);
        
        return TRUE;
    }
    
    return FALSE;
    
}

注解

Microsoft Rich Edit 3.0 还支持 HexToUnicode 输入法编辑器 (IME) 功能,让用户能够使用热键在十六进制和 Unicode 之间进行转换。 有关详细信息,请参阅 HexToUnicode IME

使用 Rich Edit 控件

Windows 通用控件演示 (CppWindowsCommonControls)