掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
HDCの制限 (ID:56076)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>WM_CREATE: > ... > hOldBmp = SelectObject(); > break; >WM_CLOSE: > ... > SelectObject(hDC, hOldBmp); > DeleteDC(hDC); > >つけわすれました。これってやったほうがいいのでしょうか? 当然やっておきましょう。 >グローバルにしたHDCって前のをを保存しといてSelectする必要があるのでしょうか? OSが一応面倒見てくれますから一応大丈夫だったりするんですが、mallocしてる のにfreeしないで終了するのと同じ扱いになります。 そんなコード書く人って信用されないですよね。後始末は大事です。 デバイスコンテキストはCreateXXした時にデフォルトのHBITMAPも同時に作成され、 それがSelectされた状態になっています。 そのまんまDeleteDCすれば、SelectされているHBITMAPも同時に破棄されます。 もしも自分の作ったHBITMAPに差し替えた場合は、 A. 元のHBITMAPをどこかに保存しておいて破棄する時は再度Selectされた状態に 戻してからDeleteDCする。 そして自分の作ったHBITMAPをDeleteObjectする。 (上記の方法) B. どうせ元のHBITMAP使わないから、差し替えた時に即座にDeleteObjectしてしまう。 Selectされている自分の作ったHBITMAPは、DeleteDCする時に同時に破棄される から後始末不要。(つまりDeleteObject不要) のどちらかにします。 A.の方がいわゆるお行儀の良い書き方です。 B.の方が一見楽に見えますが、HBITMAPが複数あり、HDCに状況に応じてSelect させた場合、最終的にどのHBITMAPが選択されているのかを確認する必要があり、 面倒になる場合があります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.