C++:出现徘徊 'ghost' 窗口..?

标签 c++ windows winapi user-interface console

我的程序 - 除其他外 - 更改控制台窗口外观(主要是窗口大小和边框)。
现在,在我的计算机上,目前一切都运行良好,但是当我在VirtualBox不同计算机上运行应用程序时,我得到以下内容:

what is happening

图像左上角的窗口实际上并不是一个窗口。这是一个窗口的图像,您无法单击它。 (鼠标点击即可浏览)
您可以通过将桌面上的选择矩形拉伸(stretch)到其上方来摆脱它,或者突出显示(例如)其下方的按钮。另外,您可以在其上移动一个窗口,使其完全消失。

图像右下角的黑色矩形是我的控制台窗口,它显示正确。

我的问题是,如何用 C++ 摆脱“幽灵”窗口?
我尝试用谷歌搜索一下,但我能找到的只是 ChangeDisplaySettings(0, 0);,它在我的计算机上没有执行任何操作(可能是因为我的计算机上什至没有这个问题),而在 VirtualBox 中,它首先似乎暂时使控制台窗口全屏,然后又恢复到原来的状态。 (第一次运行应用程序时屏幕闪烁)
虽然它确实删除了重影窗口,但我不希望屏幕像那样闪烁,所以这不是我想要的。

编辑:
由于我无法真正弄清楚与此问题相关的代码是什么,因此我将转储几乎所有与更改程序中窗口本身有关的代码。

CSBIEx.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
GetConsoleScreenBufferInfoEx(hCon, &CSBIEx);
CSBIEx.dwSize.X = 49;
CSBIEx.dwSize.Y = 21;
SetConsoleScreenBufferInfoEx(hCon, &CSBIEx);
srWnd.Bottom = 20;
srWnd.Left = 0;
srWnd.Right = 48;
srWnd.Top = 0;
SetConsoleWindowInfo(hCon, TRUE, &srWnd);
GetClientRect(hWnd, &rClnt);
rClnt.top += 1;
rClnt.bottom -= 2;
rClnt.right -= 1;
SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP);
exStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
exStyle &= ~WS_EX_CLIENTEDGE;
SetWindowLongPtr(hWnd, GWL_EXSTYLE, exStyle);
BringWindowToTop(hWnd);
SetWindowPos(hWnd, HWND_TOPMOST, ((rScr.right / 2) - rClnt.right / 2) - 1, (rScr.bottom / 2) - rClnt.bottom / 2, 0, 0, SWP_FRAMECHANGED | SWP_DRAWFRAME | SWP_NOSIZE);
SetWindowRgn(hWnd, CreateRectRgnIndirect(&rClnt), 1);
ShowWindow(hWnd, SW_SHOWNORMAL);
//ChangeDisplaySettings(0, 0);

第二次编辑:
我不知道这是否有任何帮助,但我注意到如果我使用 ChangeDisplaySettings(NULL, 0); 而不是 ChangeDisplaySettings(0, 0); 它不会什么都不做。考虑到 NULL#defined 0..
如果没有人能弄清楚任何事情,我可能最终会使用 ChangeDisplaySettings(0, 0);

最佳答案

InvalidateRect(NULL, NULL, TRUE);

这就是我正在寻找的东西。

关于C++:出现徘徊 'ghost' 窗口..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586472/

相关文章:

windows - 我应该为 RTSP 客户端创建一个新线程还是只使用媒体基础中的自定义 IMFMediaSource

c - 如何在 Windows XP 中以编程方式打开或关闭鼠标过滤器

无法导入uxtheme库

c++ - 将函数的名称发送给函数

c++ - 使用 'this ->' 引用类的成员是否有好处或性能提升?

c++ - 为什么此模板签名不能用作使用引号的字符串文字?

c++ - 在 C++ 中创建基于 HTML 的 Windows UI 的工具

java - 以编程方式关闭 Windows 中另一个进程打开的 txt 文件

c - 复制文件时 Win32 禁用 Windows 模态错误对话框

c++ - 如何为模板类的所有实例专门化或重载全局模板函数?