2012-04-18 4 views
1

C++/MFCをネイティブWinAPIの世界で使用してプログラムします。私はダイアログウィンドウクラスを持っています(MFCで作成され、CDialogから派生しています)。また、OnInitDialog()でウィンドウが表示されようとしているときにSetTimerメソッドを使ってタイマーを作成しました。私の問題は、いつこのタイマー(または他の割り当てられたリソース)を適切に解放する必要があるかです。C++/WinAPIを使用してダイアログウィンドウでリソースを解放する適切なメッセージは何ですか

PS。私はPostNcDestroy()でそれをやってみましたが、KillTimerは失敗します。しかし、私がOnClose/WM_CLOSEでそれを行うと、それは動作しますが、ユーザがOKボタンをクリックしてダイアログを閉じるときには動作しません。それには統一通知がありますか?

答えて

3

私はON_WM_DESTROYハンドラでそれをやっています。 WM_CLOSEメソッドとPostNcDestroyメソッドの間で呼び出されます。これは、すべてのウィンドウリソースを破壊する場所です。

たとえば、GDIリソースはできるだけ早く解放する必要があります。再作成は実際には時間がかからず、GDIリソースの数は極端に少なくなります。私はそれが64ビットWindowsの下でさえも、システム全体に対して10000のようなデフォルトであると思う。

+0

ありがとうございます。出来た。好奇心からだけで、なぜこれらのGDIリソースを追加しないのでしょうか? – ahmd0

+0

移植性の理由から、16ビットのハンドルを保持することになります。新しいWin7(Vistaバックポート)APIのDirect2DとWICを使用すべき理由の1つに、リソースに制限はありません。 詳細を覚えていない場合は、MSDNで説明している良い記事があります。 – Lothar

関連する問題