0

正如标题所说,在我调用 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++ 控制台应用程序,但我也看不出它有什么重要性。如果您需要更多信息,请告诉我。

谢谢你的帮助。

4

1 回答 1

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);
    }
于 2012-05-30T03:54:07.963 回答