C ++ Win32 Hide (отключить) карету из редактирования коробки

StackOverflow https://stackoverflow.com/questions/19849201

  •  29-07-2022
  •  | 
  •  

Вопрос

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

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

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 мс?). Я хочу, чтобы это не появилось вообще. Как я могу это сделать? Я хочу, чтобы пользователь все еще мог выбрать текст из редактирования.

Это было полезно?

Решение

Вы можете попробовать перенести 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top