↓ABのメモリ関係?バグ
http://www.discoversoft.net/forum/viewtopic.php?t=167
を見て、気になって自分の作ったプログラムのGDIオブジェクトの数を調べてみました。
1つ、モードレスダイアログを表示する度にGDIオブジェクトの数が上がっていくプログラムがありました。
問題のダイアログは、表示する時と閉じる時にマルチスレッドを一瞬実行して(ウインドウをスライド移動させて画面の外に出したり入れたりしています)、Staticの1つをWM_SETFONTでフォント変更しています。
5つのコントロールを配置して、GDIオブジェクトの数も5ずつ増えるのですが、
GDIオブジェクトの数とは、何者で、何をしたときに増えて(多分ウインドウを表示した時だと思うのですが・・・)、何をしたら減らせますか?
増えて問題ないものならいいのですが、ProjectEditerのように描写に問題が発生するようなら困ったな・・・と思っています。
GDIオブジェクトの数って何ですか?
コントロールそのものはGDIオブジェクトではないのでカウントはされません。
今回の場合はWM_SETFONTを使用しているとのことですので、
WM_SETFONT用に作成したフォントが削除されていないのではないでしょうか。
上記のようなコードの場合 hFont はローカル変数なので
MainWnd_Create を出るとクリアされますが、
フォントは DeleteObject をするまで残ったままになる点に注意してください。
今回の場合はWM_SETFONTを使用しているとのことですので、
WM_SETFONT用に作成したフォントが削除されていないのではないでしょうか。
コード: 全て選択
Function MainWnd_Create(...)
Dim hFont As HFONT
hFont = CreateFont(...)
SendMessage(hMainWnd, WM_SETFONT, hFont, 0)
EndFunction
MainWnd_Create を出るとクリアされますが、
フォントは DeleteObject をするまで残ったままになる点に注意してください。