Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:控制台窗口有奇怪的边框。。?_C++_C_Windows_Debugging_Winapi - Fatal编程技术网

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

C++ C++;:控制台窗口有奇怪的边框。。?,c++,c,windows,debugging,winapi,C++,C,Windows,Debugging,Winapi,我创建了一个程序,其中包括更改控制台窗口大小并从中删除窗口边框(主要通过将窗口样式设置为WS_POPUP)。 现在,在我的计算机上,应用程序的执行没有任何问题,但当我在另一台计算机(或VirtualBox)上运行代码时,我会遇到一些奇怪的小故障 下面的图片显示了我提到的这些小故障: 如果用户移动/打开控制台窗口顶部的窗口,然后再次将控制台窗口移到顶部,则会出现这些故障。 因此,很自然地,我认为解决这个问题的最简单方法是使控制台窗口始终位于顶部,但这没有帮助,因为现在故障只是从控制台窗口顶部(或

我创建了一个程序,其中包括更改控制台窗口大小并从中删除窗口边框(主要通过将窗口样式设置为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().

我设法解决了故障

我所做的只是将
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))