人生のプチ美学を教えてください!!

WinXP/VC++6

ファイルを開き、構造体配列に読み込み、CMSFlexGridに出力するソフトを開発しています。
タスクマネージャを見ていると、ファイルを開くたびにGDIオブジェクトが増えてしまいます。
CreateObjectに対応するDeleteObjectは書きました。

同ソフト内で、グラフ(タイミングチャート)を描画していますが
再描画の度にやはりGDIオブジェクトが増えてしまいます。

DeleteObjectのし忘れ以外でGDIオブジェクトが増える原因に心当たりはありませんか?
お願いします。

A 回答 (4件)

DCの解放は忘れてませんよね?



ちなみに、クラスCPenを使用している場合、CGdiObjectインスタンスの破棄時にDeleteObjectが実行されるはずですので、明示的にDeleteObjectを行なう必要はありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

GetWindowDC()したあとってReleaseDC(CDC*)しなきゃだめだったんですね……
おかげで無事解決いたしました。

お礼日時:2006/04/21 15:30

#1です。



#2の方が書かれている仕様による可能性は大ですね。
不慣れな人がやりがちです。

DeleteObject する際には、事前に必ず SelectObject で
DC との接続を切っておく必要があります。

# DeleteObject の戻り値をきちんと確認すると、
# エラーが返っていませんか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

CPen YellowPen;
CPen *pDefaultPen;
YellowPen.CreatePen(PS_SOLID,1,CL_YELLOW); // CL_YELLOW は RGBマクロにdefine
pDefaultPen = pDC->SelectObject(&YellowPen);
中略
pDC->SelectObject(pDefaultPen);
if(!YellowPen.DeleteObject())
 MessageBox(NULL,"YellowPen-DelErr",NULL,MB_OK);

というようにしていますが、MessageBoxは出ません。
それに、「ファイルを開くたびに増える」部分にはGDIオブジェクトを操作するようなコードは(自分では)書いていないんです。

お礼日時:2006/04/21 11:34

DCに関連付けられているGDIオブジェクトはDeleteObjectで破棄されない様です。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
#3へのお礼に状況説明を追加しましたので、よろしければまた回答してください。

お礼日時:2006/04/21 11:36

こんなの(参照URL)とか。

症状が違うので、別件な気がしますが。

タスクマネージャ上では単にリソースがキャッシュされてるだけで、正常という可能性もあります。
問題があるとすれば、どこかに暗黙でリソース生成する処理がいるんだと思いますが、コードすら提示もないとそれ以上はなんとも。

参考URL:http://forums.belution.com/ja/vc/000/309/05s.shtml
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
GDIオブジェクトが10000になったときにクラッシュしてしまったので、正常と言うことはないと思います。

お礼日時:2006/04/21 11:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!