我有一个全屏(窗口显示)的Win32控制台。无论何时全屏显示,我都注意到控制台光标停止闪烁。它只是保持空白。我可以用它打字。只是由于某种原因而没有闪烁。
像这样开始...
Console con("My Console");
con.setFullScreen(true);
con.setFontSize(24);
con.write("Enter your name: ");
std::string name = con.readLine();
我缩小了问题所在的范围是setFullScreen(true)。
这是该功能中使用的代码(特定于全屏显示):
bool Console::setFullScreen(const bool fullScreen, const bool showScrollBarState,
const bool hideMouseCursor)
{
HWND handle = getHandle();
LONG style;
if (fullScreen)
{
// Set the window style
style = GetWindowLong(handle, GWL_STYLE);
style &= ~(WS_BORDER | WS_CAPTION | WS_THICKFRAME);
SetWindowLong(handle, GWL_STYLE, style);
// Set the window to full screen (windowed mode)
if (!ShowWindow(handle, SW_MAXIMIZE))
return false;
} else { //…}
return true;
}
我缩小到这一行:
// Set the window to full screen (windowed mode)
if (!ShowWindow(handle, SW_MAXIMIZE))
return false;
如果我取消了这一行,则无边界窗口将显示闪烁的光标。如果我包括这一行,光标将停止闪烁。如果将其设置为SW_NORMAL,它将显示一个无边框控制台,并且光标闪烁。
作为参考,getHandle()具有以下代码:
HWND Console::getHandle()
{
return GetConsoleWindow();
}
请让我知道。谢谢。
答案 0 :(得分:2)
正如Eryksun所指出的,这似乎是WinAPI中的错误。
我现在找到的解决方案似乎是使用SW_MINIMIZE调用ShowWindow(),然后使用SW_SHOWMAXIMIZED再次调用它。
例如,
// Set the window to full screen (windowed mode)
ShowWindow(handle, SW_MINIMIZE);
ShowWindow(handle, SW_SHOWMAXIMIZED);
此后,光标再次闪烁。