9

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

Я знаю, что есть опция "скрыть курсор при наборе текста" на уровне ОС, но в Visual Studio это никак не влияет.

Также мне известны утилиты, которые могут постоянно работать в фоновом режиме (т.е. CursorHider), но по соображениям стабильности я не могу запускать еще один фоновый сервис поверх многих уже запущенных.

Есть ли решение?

4 ответа4

5

Как и у вас, у меня была эта проблема навсегда. Поэтому я написал небольшой скрипт, который скрывает курсор мыши независимо от того, какое приложение Windows вы используете.

Обратите внимание, что если вы запускаете Visual Studio (или что-то еще) в режиме с повышенными правами, вам потребуется запустить мою утилиту также в режиме с повышенными правами.

3

Кажется, что функциональность "скрыть указатель во время набора" зависит от приложения.

Этот параметр отмечен в параметрах указателя мыши и работает для таких приложений, как блокнот, WordPad, Word и Visual Studio 6. Но это не работает для других приложений, таких как Firefox и Visual Studio 2008.

Я считаю, что приложения, где это не работает, неправильно запрограммированы, чтобы показывать курсор повторно. Как программист, я могу вам сказать, что программирование курсора в Windows - это большой беспорядок, где, наконец, единственный способ сохранить здравый смысл - это многократно восстанавливать курсор при определенных событиях. Очевидно, что программисты Visual Studio 2008 использовали те же ярлыки.

1

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

0

Вы можете избежать "скрывать указатель при наборе текста", перехватывая EN_UPDATE в WndProc родительского окна элемента управления редактирования и устанавливая положение курсора:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .