-3

分かったので、文字の最小位置と最大位置で選択する方法はわかりましたが、テキストを追加する場合は、テキストを再検索して選択を更新する必要があります。だから私は検索していて、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 Corkery\r\n\r\n";
    szUpdatesString += L"New:\r\nAdded \"Information\" Tab\r\n\r\n";
    szUpdatesString += L"Improvements:\r\n\r\n";
    szUpdatesString += L"Fixes:\r\nTabs now work correctly.\r\n";
    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);

}
4

1 に答える 1

0

問題が見つかりました。WPARAM の属性が間違っていました。FR_DOWN が必要でしたが、何らかの理由で FR_DOWN が定義されていなかったので、FR_DOWN のコードを調べたところ、0x00000001 であることがわかりました。

これで動作し、

SendMessage(hUpdatesRE, EM_FINDTEXT, (WPARAM)0x00000001, (LPARAM)&FindTextExtended)
于 2016-02-11T09:17:33.607 に答える