Скрытие карета в RichEdit winapi

Я хотел бы скрыть каретку от RichEdit (50 Вт) с ES_READONLY стиль указан.
Это довольно запутанно для пользователя, когда курсор мигает и пользователь не может печатать.
Я пытался спрятать каретку используя HideCaret () функция,
однако это не работает для меня со следующим кодом:

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

1

Решение

Вот решение:

LRESULT CALLBACK ChatMessaegsSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
LRESULT ret = CallWindowProc(WndProc_ChatMessages, hwnd, msg, wParam, lParam);
switch(msg)
{
case WM_LBUTTONDOWN:
{
HideCaret(ChatMessages);
break;
}
case WM_KILLFOCUS:
{
ShowCaret(ChatMessages);
break;
}
}
return ret;
}

НОТА это работает только тогда, когда пользователь наводит фокус мышкой. Поэтому, если кто-нибудь знает, как правильно с этим справляться, смело отвечайте, я буду рад.

0

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

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

По вопросам рекламы [email protected]