3

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

似乎控制台窗口上的某些部分没有被重绘,或者类似的东西,但我尝试在整个窗口上使用 InvalidateRect() 和其他重绘函数,但它们似乎不起作用.
有人建议使用 SetWindowPos()(带有 SWP_FRAMECHANGED),但这也无济于事。

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

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

有任何想法吗?

4

1 回答 1

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);
于 2012-10-21T00:27:37.250 回答