GDIオブジェクトの数って何ですか?

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: GDIオブジェクトの数って何ですか?

by ケースケ » 2005年9月01日(木) 10:04

ありがとうございます。

フォントをダイアログボックス表示毎に作って、毎回削除するようにすればGDIオブジェクトの増加が少し減りました。


プログラムの最初にフォントを作って、最後に削除するのではいけないのですね。 でもCallbackの中を覗くと最初にフォントを作って最後に削除しているような・・・?


とりあえず、問題解決のコツは分かった(と思う)ので、後はいろいろやってみます。
ありがとうございました。

by ナナシ » 2005年8月31日(水) 21:07

コントロールそのものはGDIオブジェクトではないのでカウントはされません。

今回の場合はWM_SETFONTを使用しているとのことですので、
WM_SETFONT用に作成したフォントが削除されていないのではないでしょうか。

コード: 全て選択


Function MainWnd_Create(...)
  Dim hFont As HFONT
  hFont = CreateFont(...)
  SendMessage(hMainWnd, WM_SETFONT, hFont, 0)
EndFunction
上記のようなコードの場合 hFont はローカル変数なので
MainWnd_Create を出るとクリアされますが、
フォントは DeleteObject をするまで残ったままになる点に注意してください。

by ケースケ » 2005年8月31日(水) 13:51

ありがとうございます。

RADツールで作ったコントロールもGDIオブジェクトの1つとしてカウントされているのでしょうか?
それが開放されていないとすると、プログラムから特別に何か書くべきですか?

DeleteDC?
DeleteObject?

この辺の命令でしょうか?

再度よろしくお願いします。

by ナナシ » 2005年8月30日(火) 21:23

GDIオブジェクトをざっとあげてみると
・デバイスコンテキスト
・ビットマップ
・ペン
・ブラシ
・リージョン
・フォント
・パレット
などがそうです。他にもあるでしょう。

たとえばCreateBitmapを行うとビットマップが1つ作られるので
GDIオブジェクトの数は1つ増えます。
逆に作成したビットマップをDeleteBitmapで削除すれば1つ減ります。

GDIオブジェクトの数って何ですか?

by ケースケ » 2005年8月29日(月) 12:27

↓ABのメモリ関係?バグ
http://www.discoversoft.net/forum/viewtopic.php?t=167
を見て、気になって自分の作ったプログラムのGDIオブジェクトの数を調べてみました。

1つ、モードレスダイアログを表示する度にGDIオブジェクトの数が上がっていくプログラムがありました。
問題のダイアログは、表示する時と閉じる時にマルチスレッドを一瞬実行して(ウインドウをスライド移動させて画面の外に出したり入れたりしています)、Staticの1つをWM_SETFONTでフォント変更しています。
5つのコントロールを配置して、GDIオブジェクトの数も5ずつ増えるのですが、

GDIオブジェクトの数とは、何者で、何をしたときに増えて(多分ウインドウを表示した時だと思うのですが・・・)、何をしたら減らせますか?

増えて問題ないものならいいのですが、ProjectEditerのように描写に問題が発生するようなら困ったな・・・と思っています。

ページトップ