C ++:控制台窗口有奇怪的边框..?

时间:2012-11-26 23:04:13

标签: c++ c windows debugging winapi

我创建了一个程序 - 除其他外 - 更改控制台窗口大小并从中删除窗口边框(主要是通过将窗口样式设置为WS_POPUP)。 现在在我的计算机上,应用程序执行时没有任何问题,但是当我在另一台计算机(或VirtualBox)中运行代码时,我会遇到一些时髦的故障。

这是一张显示我所说的这些故障的图片: glitches with awesome depth of field

如果用户在控制台窗口顶部移动/打开一个窗口,然后再将控制台窗口置于顶部,则会出现这些故障。
很自然地,我认为解决这个问题的最简单方法是让控制台窗口始终位于顶部,但这并没有帮助,因为现在这些故障只是采取了他们的< em>&#39; background&#39; 来自新窗口在(或更确切地说,位于下方)控制台窗口上移动/打开之前的所有内容。
似乎某些地方以某种方式缓存/存储了glitched区域,并且没有注意到窗口已经调整大小。

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().

1 个答案:

答案 0 :(得分:0)

我设法修复了这些故障。

我所做的就是将SetWindowRgn()函数移到ShowWindow()上方(位于代码段的最后)。
这删除了闪烁的区域,现在我的窗口显示正确。

有一个错误,窗户后来没有居中,但我通过改变

修复了它
if(!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))

if(!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))