我正在尝试创建一个无边框控制台窗口 我能够将windowstyle设置为WS_POPUP,它删除了边框,但是有一些故障;
似乎控制台窗口上有一些部分没有重新绘制,或类似的东西,但我尝试在整个窗口上使用InvalidateRect(),以及其他重绘功能,但它们没有似乎工作。
有人建议使用SetWindowPos()(使用SWP_FRAMECHANGED),但这也没有做任何事情。
我一直在摆弄这个问题一段时间了,我很确定它与客户区域没有正确绘制有关(请不要引用我这个)
当我第一次向下滚动然后向上滚动时,底部毛刺部分会变成黑色/透明,但是我的程序中的文本有时不会显示在它下面,据我所知,它会表明它没有背景,所以它有一种“变色龙”效应。
有什么想法吗?
答案 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);