C++ 如何在Win32控制台中隐藏鼠标光标?

C++ 如何在Win32控制台中隐藏鼠标光标?,c++,winapi,C++,Winapi,我有一个将Win32控制台设置为全屏的函数。问题是当它进入全屏时,它并没有隐藏鼠标光标 它是否全屏显示似乎并不重要。当我调用ShowCursor(FALSE)时,鼠标光标仍然显示。它怎么可能被隐藏 与ShowCursor()的文档一样,如果函数返回的值大于0,则光标将隐藏。如果是负数,它将隐藏。对于我来说,该值返回-2,因此在本例中它应该隐藏,但事实并非如此 bool Console::setFullScreen(const bool fullScreen) { HWND handle; if

我有一个将Win32控制台设置为全屏的函数。问题是当它进入全屏时,它并没有隐藏鼠标光标

它是否全屏显示似乎并不重要。当我调用ShowCursor(FALSE)时,鼠标光标仍然显示。它怎么可能被隐藏

与ShowCursor()的文档一样,如果函数返回的值大于0,则光标将隐藏。如果是负数,它将隐藏。对于我来说,该值返回-2,因此在本例中它应该隐藏,但事实并非如此

bool Console::setFullScreen(const bool fullScreen)
{
HWND handle;

if (fullScreen)
{
    // Hide the scrollbar
    showScrollBar(false);

    // Set the window style
    handle = GetConsoleWindow();
    LONG style = GetWindowLong(handle, GWL_STYLE);
    style &= ~(WS_BORDER | WS_CAPTION | WS_THICKFRAME);
    SetWindowLong(handle, GWL_STYLE, style);

    // Set the window to full screen in windowed mode
    ShowWindow(getHandle(), SW_MAXIMIZE);   

    // Hide the cursor
    ShowCursor(FALSE);   // Fails
}
else
{
    showScrollBar(true);

    // Set the window style
    handle = GetConsoleWindow();
    LONG style = GetWindowLong(handle, GWL_STYLE);
    style |= WS_BORDER;
    style |= WS_CAPTION;
    style |= WS_THICKFRAME;

    SetWindowLong(handle, GWL_STYLE, style);

    // Set the window to full screen in windowed mode
    ShowWindow(getHandle(), SW_NORMAL); 

    // Show the cursor
    ShowCursor(TRUE);
}

return true;
}

我没有尝试过这个,但是您可能可以通过调用
GetConsoleWindow
来更改控制台窗口的鼠标光标,以获取控制台窗口的
HWND
,然后调用
SetClassLong
来设置光标

HCURSOR hNewCursor = LoadCursor(/* whatever*/);
SetClassLong(GetConsoleWindow(), GCL_HCURSOR, hNewCursor);

要使光标消失,请创建一个完全透明的光标。

控制台窗口位于另一个进程中。隐藏进程的鼠标光标不会隐藏控制台进程的鼠标光标。似乎就是这样。我认为以编程方式将鼠标光标位置移出屏幕是另一种选择。您是否尝试过此方法:?最大化与全屏不同,Windows Vista+不支持硬件全屏控制台。我尝试过此方法,但仍然获得默认光标。控制台窗口托管在另一个进程中。不能为属于另一个进程的窗口类调用
SetClassLong
,也不能从进程传递游标句柄。