Я хотел бы скрыть каретку из RichEdit (50 Вт) с указанным стилем ES_READONLY
. Это довольно запутанно для пользователя, когда каретка мигает, и пользователь не может ввести.
Я попытался скрыть каретку, используя функцию HideCaret(),
однако она не работает для меня с помощью следующего кода:Скрытие каретки в RichEdit winapi
LRESULT CALLBACK ChatMessaegsSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // Subclassed control
{
LRESULT ret = CallWindowProc(WndProc_ChatMessages, hwnd, msg, wParam, lParam);
switch(msg)
{
//Also tried with EN_SETFOCUS
case WM_SETFOCUS:
{
ret = CallWindowProc(WndProc_ChatMessages, hwnd, msg, wParam, lParam);
HideCaret(ChatMessages); //Returns 5 (Access denied.)
break;
}
//According the documentation:
//If your application calls HideCaret five times in a row,
//it must also call ShowCaret five times before the caret is displayed.
case WM_KILLFOCUS: //The message is called when the RichEdit get focus, however nothing happens.
{
ret = CallWindowProc(WndProc_ChatMessages, hwnd, msg, wParam, lParam);
ShowCaret(ChatMessages);
break;
}
}
return ret;
}
Ваше решение находится на правильном пути, но это не поможет, если управление получает фокус с клавиатуры (например, клавиши Tab). Скрывает ли каретку действительно хорошую идею? Я сомневаюсь, как это «запутывает» - это стандартное поведение элемента управления и позволяет пользователю понять, что они могут копировать текст из него, даже если они не могут ввести его. –
@JonathanPotter Вы правы с фокусом клавиатуры. Я хочу отображать такие сообщения, как в skype в этом RichEdit. Кажется запутанным для пользователей, когда они видят карет, который на самом деле говорит им: «Эй, вы можете ввести здесь!» и они не могут из-за стиля «ES_READONLY». – ProXicT
Вы можете отправить ответ на свой вопрос, чтобы люди знали, что проблема закрыта. –