ビットマップを破棄するとき、CDCから選択解除したい。 – プログラミング – Home

ビットマップを破棄するとき、CDCから...
 
通知
すべてクリア

ビットマップを破棄するとき、CDCから選択解除したい。


ダイザ
 ダイザ
(@ダイザ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

ビットマップを破棄するときは、CDCから選択解除したいのですが、
CDC::DeleteDC()をつかえばよろしいのでしょか?

CBitmap wBitmap ;
wBitmap.CreateCompatibleBitmap(pDC,1024,512) ; //カンバスを作成

CDC dc;
dc.CreateCompatibleDC(pDC); // メモリデバイスコンテキストを作成します。
  dc.SelectObject(&wBitmap) ; // カンバスを選択
  CRect wRect(0,0,200,200) ;// 矩形領域を設定
  CRgn wRgn ;
  CBrush wBrush ;
  wBrush.CreateSolidBrush(0xff0000) ;// ブラシの色に青を選択

  wRgn.CreateEllipticRgn(0,0,wRect.right,wRect.bottom) ;//(楕)円を表示
  dc.SelectObject(&wBrush) ;
  dc.PaintRgn(&wRgn) ;
pDC->BitBlt(0, 0, wRect.right, wRect.bottom, &dc, 0, 0, SRCCOPY);

  // メモリデバイスコンテキストを削除します。
dc.DeleteDC();// これで、カンバスの選択をはずしたことになるのでしょうか?


引用解決済
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

デバイスコンテキストに選択したGDIオブジェクトは、
すべて破棄する前に元に戻さなければなりません。

// ビットマップを選択し、もともと選択されていたビットマップを保持しておく。
COldBitmap* pOldBmp = dc.SelectObject(&wBitmap) ;
...
// もともとのビットマップを選択しなおす。自分が選択したものは解除される。
dc.SelectObject(pOldBmp);

dc.DelecteDC();

ブラシも(ペンやフォントなども)同様です。
解除しないと破棄できず、リソースリークします。

選択するものが多すぎて一つずつ元に戻すのが面倒でしたら、
SaveDC()とRestoreDC()を使う方法もあります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました