【发布时间】:2012-11-26 23:04:13
【问题描述】:
我创建了一个程序,其中包括更改控制台窗口大小并从中删除窗口边框(主要是通过将窗口样式设置为 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().
【问题讨论】:
标签: c++ c windows debugging winapi