正如标题所说,在调用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++控制台应用程序,但我也看不出这有什么重要的。如果你需要更多信息,请告诉我。
谢谢你的帮助。
发布于 2012-05-30 11:54:08
修复了以下代码的问题。
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);
}https://stackoverflow.com/questions/10809384
复制相似问题