SetWindowRgn関数のリソース管理について

[戻る]
kani 2002/03/19(火) 11:27:13
◆環境
・Windows98SE, Windows2000
・VC++6.0 SP3
・MFC未使用

◆困っていること
・SetWindowRgn()関数を使ってウィンドウのリージョンを結構頻繁に変更しているのですが、
  新しく設定すると前のリージョンを開放してくれていないようです。
  Win98の場合はGDIリソースがぐんぐん減っていきます。
  ヘルプにはウィンドウがそのリージョンを所有するので開放したりはせず、リージョンが不
 用になればWindowsが自動的に開放すると書いてあるのですが...
・不用となるのがいつか判りません。新しいリージョンを設定した時ではないのでしょうか?
・どうにかしてリソースが無用に減らないようにできませんか?

◆以下ソース(例外処理は割愛)
// 初めの一つを作る
HRGN hRgn = CreateRectRgn( rcPram[0].left, rcPram[0].top, rcPram[0].right + 1, 
rcPram[0].bottom + 1 );

// 領域を合成していく
for( DWORD dwCt = 1 ; dwCt < 4 ; dwCt++ )
{
    // 領域を作成
    HRGN hTempRgn = CreateRectRgn( rcPram[dwCt].left, rcPram[dwCt].top, rcPram
[dwCt].right + 1, rcPram[dwCt].bottom + 1 );

    // 合成
    CombineRgn( hRgn, hRgn, hTempRgn, RGN_OR );
    
    // 後始末
    DeleteObject( hTempRgn );
}

// ウィンドウの領域を設定
SetWindowRgn( m_hWnd, hRgn, TRUE );

dairygoods 2002/03/19(火) 15:32:58
>・不用となるのがいつか判りません。新しいリージョンを設定した時ではないのでしょうか?

この通りのように思えますが…。
SetWindowRgnした後に、以前のリージョンを削除すればよいのでは?

古いスレッドには追加発言できません。