首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetWindowRgn冻结窗口

SetWindowRgn冻结窗口
EN

Stack Overflow用户
提问于 2012-05-30 10:48:35
回答 1查看 650关注 0票数 0

正如标题所说,在调用SetWindowRgn之后,我遇到了应用程序窗口冻结(不再绘画)的问题。我的源码如下:

代码语言:javascript
复制
    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++控制台应用程序,但我也看不出这有什么重要的。如果你需要更多信息,请告诉我。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 11:54:08

修复了以下代码的问题。

代码语言:javascript
复制
    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);
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10809384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档