编程效率:如何在打字时隐藏光标

编程效率:如何在打字时隐藏光标

每当我点击某个地方输入代码时,根据定义,那里就是我的鼠标光标所在的位置,这会遮挡我要输入的内容。通常,如果我在开始输入之前忘记将光标移开,我会发现自己将手从键盘移回鼠标,只是为了将光标移开,然后继续输入。

我知道有一个操作系统级别的“键入时隐藏光标”选项,但这在 Visual Studio 中似乎没有效果。

另外,我知道一些可以在后台持续运行的实用程序(例如光标隐藏器),但出于稳定性原因,我犹豫是否在已经运行的众多后台服务之上再运行另一项后台服务。

有解决办法吗?

答案1

和你一样,我也一直有这个问题。所以我写了一点隐藏鼠标光标的脚本无论您使用什么 Windows 应用程序。

请注意,如果您在提升模式下运行 Visual Studio(或任何东西),则您也需要在提升模式下运行我的实用程序。

答案2

似乎“打字时隐藏指针”的功能取决于应用程序。

这个选项在我的鼠标指针选项中被勾选,并且对记事本、写字板、Word 和 Visual Studio 6 等应用程序有效。但它对其他应用程序无效,例如 Firefox 和 Visual Studio 2008。

我认为,无法实现此功能的应用程序是错误地编程为重复显示光标的。作为一名程序员,我可以告诉你,在 Windows 中对光标进行编程是一团糟,最终保持理智的唯一方法是根据某些事件重复重建光标。显然,Visual Studio 2008 背后的程序员也采取了同样的捷径。

答案3

我知道这对你来说可能不是一个可行的解决方案,但我喜欢通过在 IDE 中为所有内容设置键绑定来完全不使用鼠标。我可以从一个窗格跳转到另一个窗格,从一个错误跳转到另一个错误等等,而不必触摸鼠标。此外,如果你的类又好又小,你就不必在类之间上下滚动太多次(即使你必须这样做,箭头键也足够了)。

答案4

您可以通过捕获编辑控件父窗口的 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 );
}

相关内容