winapi — c ++ win32 скрыть (отключить) каретку из поля ввода

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

Это мой код для подкласса:

LRESULT CALLBACK UserInfoProc (HWND hUserInfoWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{

HideCaret(hUserInfoWnd);

return DefSubclassProc(hUserInfoWnd, uMsg, wParam, lParam);

}

Я знаю, что это скромный кусок кода, но он почти делает то, что я хочу.

Итак, что происходит, когда я нажимаю кнопку редактирования, каретка может быть видна на мгновение (50 мс?). Я хочу, чтобы это вообще не появлялось. Как я могу это сделать? Я хочу, чтобы пользователь все еще мог выбрать текст для редактирования.

0

Решение

Вы можете попробовать переместить HideCaret() позвонить после DefSubclassProc(), поскольку в данный момент, если сообщение запускает каретку, оно не будет до следующий сообщение, что оно снова скрыто.

Кроме того, я предполагаю, что единственное сообщение, которое запускает отображаемую каретку, это WM_SETFOCUS, поэтому вы можете проверить только это сообщение. Например,

LRESULT CALLBACK UserInfoProc (HWND hUserInfoWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
LRESULT lRes = DefSubclassProc(hUserInfoWnd, uMsg, wParam, lParam);
if (uMsg == WM_SETFOCUS) // maybe?
HideCaret(hUserInfoWnd);
return lRes;
}
1

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

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