프로그래밍 생산성 : 입력하는 동안 커서를 숨기는 방법


9

코드를 입력하기 위해 어딘가를 클릭 할 때마다 마우스 커서가있는 정확한 위치에 입력하려는 내용이 모호해집니다. 입력을 시작하기 전에 커서를 멀리 이동하는 것을 잊어 버린 경우 커서를 방해하지 않고 키보드에서 마우스로 손을 움직여 다시 입력으로 돌아갑니다.

OS 수준의 "입력하는 동안 커서 숨기기"옵션이 있지만 Visual Studio에는 영향을 미치지 않는 것 같습니다.

또한 백그라운드에서 지속적으로 실행할 수있는 유틸리티 (예 : CursorHider )를 알고 있지만 안정성상의 이유로 이미 실행중인 많은 것 위에서 또 다른 백그라운드 서비스를 실행하는 것을 망설 입니다.

해결책이 있습니까?


superuser.com에 대한 좋은 질문입니다. :-)
Franci Penov

글쎄, 당신은 ... 맥을 사용할 수 있습니다
dmckee --- 전 사회자 고양이

나를 위해, 마우스를 멀리 옮기는 것은 내가 생각조차하지 않는 반사입니다. (I 일반 편집기를 사용하여 중지하고 정력 사용하기 시작 때까지 즉,)
하센

답변:


5

당신처럼, 나는이 문제를 영원히 가지고 있었다. 그래서 사용중인 Windows 응용 프로그램에 관계없이 마우스 커서를 숨기는 작은 스크립트를 작성했습니다 .

상승 모드에서 Visual Studio (또는 기타)를 실행하는 경우 상승 모드에서도 유틸리티를 실행해야합니다.


나는 그러한 강력한 방법이 모든 상황에서 올바른지 의심합니다. 키를 입력 할 때마다 커서가 사라지는 것은 예를 들어 게임에서 매우 성 가실 수 있습니다.
harrymc

이 경우 당신은 말했다, 나는 대부분의 게임이 자신의 커서를 구현하는 생각 ... 게임 중에 언로드 할 수 있습니다
스테판 Z 카밀레

지금까지 Windows 커서 커서가 잘 작동합니다. 나는 AHK 스크립트와 같은 간단한 것을 찾고있었습니다. 감사합니다 @StefanZCamilleri!
russds

3

"입력하는 동안 포인터 숨기기"기능은 응용 프로그램에 따라 다릅니다.

이 옵션은 마우스의 포인터 옵션에 표시되어 있으며 메모장, 워드 패드, Word 및 Visual Studio 6과 같은 응용 프로그램에서는 작동하지만 Firefox 및 Visual Studio 2008과 같은 다른 응용 프로그램에서는 작동하지 않습니다.

이것이 작동하지 않는 응용 프로그램은 커서를 반복적으로 표시하도록 잘못 프로그래밍되어 있다고 생각합니다. 프로그래머로서, Windows에서 커서를 프로그래밍하는 것은 큰 혼란이라고 말할 수 있습니다. 마지막으로 제정신을 유지하는 유일한 방법은 특정 이벤트에서 커서를 반복적으로 재구성하는 것입니다. 분명히 Visual Studio 2008의 프로그래머는 동일한 바로 가기를 사용했습니다.


PLS는 내 대답은 아래를 참조하십시오 - 당신은 OS 수준에서 커서를 숨길 경우, 그것은 (그것을 무시할 것이다) 보여주기 위해 커서를 강제 아이디어 배뇨, 숨겨진 남아 있기 때문에 이것은하지만 잘못된 가정이다
스테판 Z 카밀레

1

나는 이것이 당신에게 실용적인 해결책이 아니라는 것을 알고 있지만 IDE 내의 모든 것에 대해 키 바인딩을 사용하여 마우스를 전혀 사용하지 않는 것을 좋아합니다. 마우스를 터치하지 않고도 창에서 창으로, 오류에서 오류로 이동할 수 있습니다. 또한 수업이 훌륭하고 작은 경우에는 수업을 너무 많이 스크롤 할 필요가 없습니다 (화살표 키가 있어도 충분합니다).


0

편집 제어의 상위 창 WndProc에서 EN_UPDATE를 잡고 커서 위치를 설정하면 "입력하는 동안 포인터 숨기기"를 피할 수 있습니다.

void CreateEdit( HWND hWnd )
{

    WNDCLASSEX wndClass;

    memset( &wndClass, 0, sizeof( wndClass ) );

    wndClass.cbSize = sizeof( wndClass );
    wndClass.style = CS_SAVEBITS;
    wndClass.lpfnWndProc = WndProcEditParent;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = GetModuleHandle( NULL );
    wndClass.hIcon = NULL;
    wndClass.hCursor = NULL;
    wndClass.hbrBackground = NULL;
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = L"EditParent";

    RegisterClassEx( &wndClass );

    HWND hWndEditParent = CreateWindowEx( 0
        , L"EditParent"
        , L""
        , WS_CHILD | WS_BORDER
        , 0
        , 0
        , 0
        , 0
        , hWnd
        , NULL
        , GetModuleHandle( NULL )
        , 0 );

    HWND hWndEdit = CreateWindowEx( 0
        , L"Edit"
        , L""
        , WS_CHILD
        , 0
        , 0
        , 0
        , 0
        , hWndEditParent
        , NULL
        , GetModuleHandle( NULL )
        , 0 );

    ...
}


LRESULT CALLBACK Edit::WndProcEditParent( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
    switch( iMessage )
    {
        ...
        case WM_COMMAND:
            if( HIWORD( wParam ) == EN_UPDATE )
            {
            // this is the hack to avoid "hide pointer while typing"
                POINT point;

                GetCursorPos( &point );
                SetCursorPos( point.x, point.y );
            }
            break;
        ...
    }

    return DefWindowProc( hWnd, iMessage, wParam, lParam );
}

1
이것은 정말 좋은 답변 일지 모르지만 사용 방법을 모르겠습니다. 설명을 추가하십시오. 의견에 응답하지 마십시오.  명확하고 완전하게 답변을 편집 하십시오.
G-Man은 'Reinstate Monica'라고 말합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.