如何使用文本获取选择 - RichEditBox C++

How do I get a selection with Text - RichEditBox C++

本文关键字:RichEditBox C++ 选择 获取 何使用 文本      更新时间:2023-10-16

好的,所以我知道如何使用最小-最大字符位置进行选择,但是如果您添加文本,则必须重新查找文本并更新选择。所以我在搜索,发现您可以使用 FindTextEx 输入一个单词,最小/最大搜索位置,它将返回该单词的最小/最大。

但它对我来说总是失败,我不知道为什么,MSDN 也说向后搜索使用FR_DOWN但是当我将其输入为 (WPARAM( 属性时,它说它是未定义的(就像 FindTextEx 页面上列出的其他FR_的 50%(

包含RichEdit.h(这只是一个函数,因为我的程序目前太大而无法发布整个源代码(

 void UpdateLog() {
    CHARFORMAT CharFormat;
    CharFormat.cbSize = sizeof(CHARFORMAT);
    CharFormat.dwMask = CFM_BOLD | CFM_EFFECTS;
    CharFormat.dwEffects = CFE_BOLD | CFE_AUTOCOLOR;
    std::wstring szUpdatesString;
    szUpdatesString += L"SQL Manager V1.3 - Trevin Corkeryrnrn";
    szUpdatesString += L"New:rnAdded "Information" Tabrnrn";
    szUpdatesString += L"Improvements:rnrn";
    szUpdatesString += L"Fixes:rnTabs now work correctly.rn";
    SetWindowText(hUpdatesRE, szUpdatesString.c_str());
    CHARRANGE CharRange = { 0 };
    FINDTEXTEX FindTextExtended;
    FindTextExtended.chrg.cpMin = 0;
    FindTextExtended.chrg.cpMax = -1;
    FindTextExtended.lpstrText = L"New";

    SendMessage(hUpdatesRE, EM_FINDTEXTEX, FR_NOT_ENUM, (LPARAM)&FindTextExtended);
    SendMessage(hUpdatesRE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&CharFormat);
}

好吧,我发现了问题所在,我的 WPARAM 属性错误。它需要FR_DOWN,但是由于某种奇怪的原因FR_DOWN未定义,我查找了FR_DOWN的代码,发现它0x00000001。

这现在有效,

SendMessage(hUpdatesRE, EM_FINDTEXT, (WPARAM)0x00000001, (LPARAM)&FindTextExtended)