C ++:将控制台窗口设置为WS_POPUP

时间:2012-10-20 20:49:26

标签: c++ windows winapi console cmd

我正在尝试创建一个无边框控制台窗口 我能够将windowstyle设置为WS_POPUP,它删除了边框,但是有一些故障; Glitches..

似乎控制台窗口上有一些部分没有重新绘制,或类似的东西,但我尝试在整个窗口上使用InvalidateRect(),以及其他重绘功能,但它们没有似乎工作。
有人建议使用SetWindowPos()(使用SWP_FRAMECHANGED),但这也没有做任何事情。

我一直在摆弄这个问题一段时间了,我很确定它与客户区域没有正确绘制有关(请不要引用我这个)

当我第一次向下滚动然后向上滚动时,底部毛刺部分会变成黑色/透明,但是我的程序中的文本有时不会显示在它下面,据我所知,它会表明它没有背景,所以它有一种“变色龙”效应。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我终于明白了。 (非常感谢Maximus)
我必须像他建议的那样使用SetWindowRgn()

最终代码看起来像这样:

HWND hWnd = GetConsoleWindow();
RECT rcScr, rcWnd, rcClient;

GetWindowRect(hWnd, &rcWnd);
GetWindowRect(GetDesktopWindow(), &rcScr);
GetClientRect(hWnd, &rcClient);

MoveWindow(hWnd, (rcScr.right / 2) - 330, (rcScr.bottom / 2) - 180, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top, 1);
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
SetWindowRgn(hWnd, CreateRectRgn(rcClient.left + 2, rcClient.top + 2, rcClient.right + 2, rcClient.bottom + 2), TRUE);
ShowWindow(hWnd, 1);