我创建了一个程序,其中包括更改控制台窗口大小并从中删除窗口边框(主要是通过将窗口样式设置为 WS_POPUP)。
现在在我的计算机上,应用程序执行没有任何问题,但是当我在另一台计算机(或 VirtualBox)中运行代码时,我遇到了一些时髦的故障。
这是一张图片,显示了我所说的这些故障:
如果用户在控制台窗口顶部移动/打开一个窗口,然后将控制台窗口再次带到顶部,这些故障就会出现。
所以很自然地,我认为摆脱这个问题的最简单方法是让控制台窗口始终位于顶部,但这并没有帮助,因为现在这些故障只是从新出现的任何东西中获取它们的“背景”窗口在控制台窗口的顶部(或更确切地说,在下面)移动/打开。
似乎故障区域以某种方式缓存/存储在某处,并且没有注意到窗口已调整大小。
GetClientRect(hWnd, &rClnt);
rClnt.top += 1;
rClnt.bottom -= 2;
rClnt.right -= 1;
SetWindowRgn(hWnd, CreateRectRgnIndirect(&rClnt), 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) - rWnd.right / 2) - 1, (rScr.bottom / 2) - rWnd.bottom / 2, 0, 0, SWP_FRAMECHANGED | SWP_DRAWFRAME | SWP_NOSIZE);// After this I just use ShowWindow().