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 に答える