- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的程序 - 除其他事项外 - 更改了控制台窗口的外观(主要是窗口大小和边框)。
现在在我的电脑上,目前一切都运行良好,但是当我在VirtualBox或在不同的电脑上运行应用程序时,我得到以下内容:
图像左上角的窗口实际上不是窗口。这是一个窗口的图像,您无法单击它。 (鼠标点击通过)
您可以通过在桌面上拉伸(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
这很奇怪是#define
d 0
..
如果没人能弄清楚,我可能最终会使用 ChangeDisplaySettings(0, 0);
.
最佳答案
InvalidateRect(NULL, NULL, TRUE);
是我要找的东西。
关于C++:出现一个挥之不去的 'ghost' 窗口..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586472/
我正在使用 cron 运行以下脚本,在/etc/cron.d/mycron 我有以下内容: */10 * * * * MyUserThatNeedsToRunTheScript /backup/ssh
我是一名优秀的程序员,十分优秀!