每当我点击某个地方输入代码时,根据定义,那里就是我的鼠标光标所在的位置,这会遮挡我要输入的内容。通常,如果我在开始输入之前忘记将光标移开,我会发现自己将手从键盘移回鼠标,只是为了将光标移开,然后继续输入。
我知道有一个操作系统级别的“键入时隐藏光标”选项,但这在 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 );
}