每当我单击某处键入一些代码时,根据定义,这正是我的鼠标光标所在的位置,这掩盖了我要键入的内容。通常,如果我忘记在开始输入之前将光标移开,就会发现自己将手从键盘移回了鼠标,只是将光标移开了,然后又回到了输入。
我知道有一个操作系统级别的“键入时隐藏光标”选项,但是在Visual Studio中似乎没有任何作用。
另外,我知道可以在后台连续运行的实用程序(Ie CursorHider),但是出于稳定性的原因,我一直在运行已经运行的许多后台服务上犹豫不决。
有解决方案吗?
每当我单击某处键入一些代码时,根据定义,这正是我的鼠标光标所在的位置,这掩盖了我要键入的内容。通常,如果我忘记在开始输入之前将光标移开,就会发现自己将手从键盘移回了鼠标,只是将光标移开了,然后又回到了输入。
我知道有一个操作系统级别的“键入时隐藏光标”选项,但是在Visual Studio中似乎没有任何作用。
另外,我知道可以在后台连续运行的实用程序(Ie CursorHider),但是出于稳定性的原因,我一直在运行已经运行的许多后台服务上犹豫不决。
有解决方案吗?
Answers:
像您一样,我永远都遇到这个问题。因此,无论您使用哪种Windows应用程序,我都编写了一个小脚本来隐藏鼠标光标。
请注意,如果在提升模式下运行Visual Studio(或其他任何方式),则还需要在提升模式下运行我的实用程序。
似乎“键入时隐藏指针”的功能取决于应用程序。
此选项在我的鼠标的指针选项中打勾,并且适用于记事本,写字板,Word和Visual Studio 6等应用程序。但不适用于Firefox和Visual Studio 2008等其他应用程序。
我认为不能正常工作的应用程序被错误地编程以重复显示光标。作为一名程序员,我可以告诉您,在Windows中对光标进行编程会造成很大的麻烦,最后,保持理智的唯一方法是在某些事件上反复重新构造光标。显然,Visual Studio 2008背后的程序员采用了相同的快捷方式。
您可以通过在编辑控件的父窗口的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 );
}