Элемент управления редактированием не может установить текст в пустую строку

У меня есть контроль редактирования:

    HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL |
ES_WANTRETURN,
0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL);

И когда кнопка нажата, я получаю текст из нее и пытаюсь заменить ее пустой строкой:

        TCHAR buff[2048];
memset(buff,0,2048);
GetWindowText(hInput, buff, 2048);
SetWindowText(hInput,"");

Но после этого в редакторе редактирования остается новая строка.

Есть идеи как убрать эту новую строку? Заранее спасибо.

РЕДАКТИРОВАТЬ:
На самом деле, тогда кнопка нажата, все в порядке, никаких новых строк.

Элемент управления для редактирования имеет процедуру сообщения, которая фиксирует клавишу ввода и делает то же самое, что и кнопка, когда она нажата. Вот процедура:

LRESULT CALLBACK SubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
TCHAR buff[2048];
memset(buff,0,2048);
GetWindowText(hInput, buff, 2048);
SetWindowText(hInput,"");
break;
}
break;

}
return CallWindowProc(DefProc, hwnd, msg, wParam, lParam);
}

Но здесь он покидает новую линию.

3

Решение

Когда вы обрабатываете WM_KEYDOWN, вы успешно очищаете элемент управления редактирования.

Затем вы передаете это сообщение базовому классу, который является элементом управления редактирования, и он вставляет возврат каретки в текст. Это одна теория. Если это правильно, то просто не отправка сообщения WM_KEYDOWN в базовый класс решит проблему.

Другая теория заключается в том, что за WM_KEYDOWN следует WM_CHAR (синтезированный с помощью TranslateMessage), и в элемент управления редактирования добавляется возврат каретки на основе этого сообщения. Если это правильно, то у вас есть интересная ситуация, когда вы сказали, что хотите многострочный элемент управления, но вы пытаетесь очистить содержимое каждый раз, когда пользователь пытается создать новую строку.

Я неправильно сказал о ES_WANTRETURN. Это работает с кодом диалогового окна, чтобы убедиться, что он не крадет нажатия клавиш возврата каретки вообще. Вот почему я изменил свой первоначальный ответ.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector