前提・実現したいこと
Microsoft Visual Studio Community 2019
VC++ ダイアログベース
後述のソースコードでGDIオブジェクトのリソースリークが
発生するのですが、理由・解決方法を知りたいです。
発生している問題・エラーメッセージ
ボタン1をクリックするたびに、Test(CDC* pDC) 関数を通り
タスクマネージャー ⇒ 詳細タブ ⇒ GDIオブジェクト列 の
カウントが1ずつ増えていきます。
該当のソースコード
vc++
1void CTestDlg::OnBnClickedButton1() 2{ 3 CString prtName = L"Microsoft Print to PDF"; 4 CDC prtDC; 5 if (prtDC.CreateDC(NULL, prtName, NULL, NULL)) { 6 Test(&prtDC); 7 prtDC.DeleteDC(); 8 } 9} 10void CTestDlg::Test(CDC* pDC) 11{ 12 CDC tmpDC; 13 CBitmap tmpBmp; 14 tmpDC.CreateCompatibleDC(pDC); 15 tmpBmp.CreateCompatibleBitmap(pDC, 100, 100); 16 tmpDC.SaveDC(); 17 tmpDC.SelectObject(&tmpBmp); 18 tmpDC.RestoreDC(-1); 19 tmpDC.DeleteDC(); 20 tmpBmp.DeleteObject(); 21}
試したこと
Test(CDC* pDC) 関数内の tmpBmp.DeleteObject() で
GDIオブジェクトのカウントが減らないようです。
Test(CDC* pDC) に渡す CDC のポインタを ClientDC に
変更した場合はカウントが減りました。
プリンタDC の互換DC/BMPを生成 SelectObject したときに
起きる現象のように見えます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー