ประสิทธิภาพการเขียนโปรแกรม: วิธีซ่อนเคอร์เซอร์ขณะพิมพ์


9

เมื่อใดก็ตามที่ฉันคลิกที่ใดที่หนึ่งเพื่อพิมพ์รหัสตามคำนิยามนั่นคือสิ่งที่เคอร์เซอร์เมาส์ของฉันอยู่ซึ่งเป็นสิ่งที่คลุมเครือสิ่งที่ฉันพยายามพิมพ์ บ่อยครั้งถ้าฉันลืมเลื่อนเคอร์เซอร์ออกไปก่อนที่จะเริ่มพิมพ์ฉันจะพบว่าตัวเองขยับมือจากคีย์บอร์ดกลับไปที่เมาส์เพื่อเลื่อนเคอร์เซอร์ออกจากทางแล้วกลับไปพิมพ์

ฉันรู้ว่ามีตัวเลือก "ซ่อนเคอร์เซอร์ขณะที่พิมพ์" ระดับ OS แต่ดูเหมือนว่าจะไม่มีผลใน Visual Studio

นอกจากนี้ฉันรู้ว่ามีประโยชน์ที่สามารถทำงานได้อย่างต่อเนื่องในพื้นหลัง (Ie CursorHider ) แต่ด้วยเหตุผลด้านความมั่นคงฉันลังเลที่จะเรียกใช้บริการพื้นหลังอื่นที่อยู่ด้านบนของหลาย ๆ ตัวที่กำลังทำงานอยู่

มีวิธีแก้ไขไหม?


เป็นคำถามที่ดีสำหรับ superuser.com :-)
Franci Penov

ทีนี้คุณสามารถใช้ mac ได้ ...
dmckee --- อดีตผู้ดูแล kitten

สำหรับฉันแล้วการเลื่อนเมาส์ไปนั้นเป็นภาพสะท้อนที่ฉันไม่ได้คิด (นั่นคือจนกว่าฉันจะหยุดใช้บรรณาธิการปกติและเริ่มใช้เป็นกลุ่ม)
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 มีทางลัดเดียวกัน


นี่เป็นข้อสันนิษฐานที่ไม่ถูกต้องเนื่องจากถ้าคุณซ่อนเคอร์เซอร์ที่ระดับ OS มันจะยังคงซ่อนอยู่ทำให้โมฆะแนวคิดบังคับให้เคอร์เซอร์แสดง (ซึ่งจะแทนที่มัน) - โปรดดูคำตอบของฉันด้านล่าง
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 กล่าวว่า 'Reinstate Monica'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.