【问题标题】:C++: Console window has weird borders..?C++:控制台窗口有奇怪的边框..?
【发布时间】: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


    【解决方案1】:

    我设法修复了故障。

    我所做的只是将SetWindowRgn() 函数移到了ShowWindow() 的上方(它将位于代码sn-p 的最后)。
    这消除了故障区域,现在我的窗口可以正确显示。


    后来出现了窗口不居中的错误,但我通过更改修复了它

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2014-03-29
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多