Yount_0701 Ответов: 1

Win32 control richedit, как найти строку с помощью сообщений em_findtext win32


win32 RichEdit control поддерживает большое количество слов. я пытаюсь найти какую-то ниточку в этом виде контроля. Я нахожу сообщение win32
EM_FINDTEXT
на MSDN. если была найдена spfecified строка , возвращаемое значение будет индексом текста элемента управления.

Я пробовал,но ничего не вышло.

Что я уже пробовал:

вот несколько простых кодов.

int result = 0;
FINDTEXT findtext_param;

RichEdit1->Text = "Hello,this is a test from younth.";

char find_str[256] = "from";
findtext_param.lpstrText = find_str;
findtext_param.chrg.cpMin = 0;
findtext_param.chrg.cpMax = -1;

result = SendMessage(RichEdit1->Handle,EM_FINDTEXT,FR_DOWN,(LPARAM)&findtext_param);
if(result >= 0) ShowMessage("string found.");
else ShowMessage("string not found.");


вы можете видеть,что значение элемента управления было установлено, оно все еще возвращает -1.
что не так в коде ?

1 Ответов

Рейтинг:
2

Leo Chapiro

Сначала вам нужно выбрать свой диапазон:

int result = 0;
FINDTEXT findtext_param;

RichEdit1->Text = "Hello,this is a test from younth.";

char find_str[256] = "from";
findtext_param.lpstrText = find_str;
findtext_param.chrg.cpMin = 0;
findtext_param.chrg.cpMax = -1;

// Missing this part
	CHARRANGE cr;
	cr.cpMin = -1;
	cr.cpMax = -1;

	SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&cr);
// <--

result = SendMessage(RichEdit1->Handle,EM_FINDTEXT,FR_DOWN,(LPARAM)&findtext_param);
if(result >= 0) ShowMessage("string found.");
else ShowMessage("string not found.");


Yount_0701

Я попробовал ваш код , но он просто не работает.Что-нибудь случилось ?

Leo Chapiro

Взгляните на этот пример: Добавьте RichEdit в свое приложение! (не-МФЦ) и проверьте, что вы упускаете еще.