正如标题所说,我在调用SetWindowRgn之后遇到了应用程序窗口冻结(不再绘画)的问题。我的源代码如下:
void MakeHole()
{
// This will make a hole you can see through for the MainToon window.
HRGN thisHgrn = CreateRectRgn(10, 200, 300, 200);
SetWindowRgn(hwndClientList[intMainToon], thisHgrn, TRUE);
}
我甚至不太确定SetWindowRgn是我需要使用的代码。我想要完成的只是游戏窗口中的一个洞(透明块),这样我才能看透它。在这一点上,项目中的其他任何代码都没有真正相关。一切都按预期工作,除了在我调用SetWindowRgn之后,游戏窗口不再绘制了。它看起来很冷,但我仍然可以关闭窗口,声音仍然清晰。这是一个可视化的C ++控制台应用程序,但我不知道它是如何具有任何重要性的。 如果您需要更多信息,请与我们联系。
感谢您的帮助。
答案 0 :(得分:3)
修复了以下代码的问题。
void MakeHole()
{
// This will make a hole you can see through for the MainToon window.
HRGN rgnOriginalWnd;
HRGN rgnTheHole;
HRGN rgnNewWnd;
RECT rectDlg;
GetWindowRect(hwndClientList[intMainToon], &rectDlg);
rgnOriginalWnd = CreateRectRgn(0, 0, rectDlg.right - rectDlg.left, rectDlg.bottom - rectDlg.top);
rgnTheHole = CreateRectRgn(10, 200, 350, 450);
rgnNewWnd = CreateRectRgn(0, 0, 0, 0);
CombineRgn(rgnNewWnd, rgnOriginalWnd, rgnTheHole, RGN_DIFF);
SetWindowRgn(hwndClientList[intMainToon], rgnNewWnd, TRUE);
DeleteObject(rgnOriginalWnd);
DeleteObject(rgnTheHole);
DeleteObject(rgnNewWnd);
}