2016-02-11 43 views
-3

好吧,我知道如何使用最小 - 最大字符位置進行選擇,但是如果添加文本,則必須重新查找文本並更新選區。所以我搜索並發現可以使用FindTextEx鍵入一個單詞,最小/最大搜索位置,它將返回該單詞的最小/最大值。如何使用文本獲取選區 - RichEditBox C++

但它總是失敗,我不知道爲什麼,也MSDN說後向搜索使用FR_DOWN,但是當我鍵入它作爲(WPARAM)屬性它說它是未定義的(像50%的其他FR_ FINDTEXTEX頁)包含

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); 

} 
+1

失敗怎麼辦? 'EM_FINDTEXTEX'返回匹配開始位置,在你的代碼中你根本沒有使用返回值。 –

+0

我知道,那是因爲如果它「返回」它沒有找到所選文本,它將對cpMin和cpMax都返回-1。 我沒有使用它,只是因爲它沒有返回任何東西。我只是在調試器中檢查返回值。 –

+0

根據文檔,您應該使用EM_FINDTEXTEXW用於Unicode。你嘗試過嗎? –

回答

0

好吧,我發現了這個問題,我有WPARAM的錯誤屬性。它需要FR_DOWN,但由於某種奇怪的原因,因爲FR_DOWN未定義,我查找了FR_DOWN的代碼,發現它是0x00000001。

現在這工作,

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