SetWindowRgn冻结窗口

时间:2012-05-30 02:48:35

标签: windows visual-studio-2010 winapi visual-c++

正如标题所说,我在调用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 ++控制台应用程序,但我不知道它是如何具有任何重要性的。 如果您需要更多信息,请与我们联系。

感谢您的帮助。

1 个答案:

答案 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);
    }