문제

사용자가 읽기 전용 편집 상자에서 텍스트를 선택할 수 있도록 만들려고하지만 깜박이는 간병을 볼 수는 없습니다. 나는 편집에서 간병을 사라지게 할 수 있었지만 여전히 순간적으로 볼 수 있습니다.

이것은 서브 클래스에 대한 내 코드입니다.

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

}

그것은 겸손한 코드이지만, 나는 거의 내가 원하는 것을 수행합니다.

따라서 편집을 클릭하면 즉시 (50ms?)에 대해 간병을 볼 수 있습니다. 나는 그것이 전혀 나타나지 않기를 원한다. 어떻게 할 수 있습니까? 사용자가 여전히 편집에서 텍스트를 선택할 수 있기를 원합니다.

도움이 되었습니까?

해결책

당신은 움직일 수 있습니다 HideCaret() 후에 전화하십시오 DefSubclassProc(), 메시지가 Caret를 트리거하는 경우 현재까지는 다음 다시 숨겨져 있다는 메시지.

또한 표시 할 캐레트를 트리거하는 유일한 메시지는 다음과 같습니다. 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