Продуктивність програмування: як приховати курсор під час набору тексту


9

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

Я знаю, що існує опція "приховати курсор під час набору тексту" на рівні ОС, але це, схоже, не має ефекту у Visual Studio.

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

Чи є рішення?


Приємне запитання для superuser.com. :-)
Франці Пенов

Ну, ви могли б скористатися mac ...
dmckee --- кошеня колишнього модератора

Для мене відсунення миші - це рефлекс, про який я навіть не думаю. (Тобто, поки я не перестав використовувати звичайні редактори і почав використовувати VIM)
HASEN

Відповіді:


5

Як ви, у мене ця проблема була назавжди. Тому я написав невеликий сценарій, який приховує курсор миші незалежно від того, яку програму Windows ви використовуєте.

Зауважте, що якщо ви запускаєте Visual Studio (або що-небудь) у підвищеному режимі, вам потрібно запустити мою утиліту також у підвищеному режимі.


У мене є сумніви, чи такий сильний метод правильний у всіх ситуаціях. Курсор зникає, коли будь-яка клавіша вводиться, наприклад, може дуже дратувати ігор.
harrymc

У такому випадку ви можете просто розвантажити його під час гри ... але сказано, я вважаю, що більшість ігор реалізує власний курсор
Stefan Z Camilleri

Windows-Cursor-Hider працює добре зараз. Я шукав щось таке просте, як сценарій AHK. Дякую @StefanZCamilleri!
russds

3

Здається, функціонал "приховувати покажчик під час набору тексту" залежить від програми.

Цей параметр позначено у параметрах вказівника миші та працює в таких додатках, як блокнот, WordPad, Word та Visual Studio 6. Але він не працює для інших програм, таких як Firefox та Visual Studio 2008.

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


Це невірне припущення, однак, якщо ви заховаєте курсор на рівні ОС, він залишатиметься прихованим, анулюючи ідею змусити курсор показувати (що би його перекрило) - див. Мою відповідь нижче
Stefan Z Camilleri

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

1
Це може бути справді чудовою відповіддю, але я поняття не маю, як це використати. Будь ласка, додайте пояснення. Не відповідайте в коментарях; відредагуйте  свою відповідь, щоб зробити її більш зрозумілою та повною.
G-Man каже: "Відновіть Моніку"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.