VC6.0で開発されたMFCプロジェクトをVS2015用に変換したプロジェクトを使用しています。
OnPaint()にて描画処理を追加したいのですが、ピクチャコントロールに対してGetDCを行っただけで例外が発生し、
下記の内容のログが出て中断してしまいます。
---------------------------------------
Debug Assertion Failed!
Program: C:\WINDOWS\SYSTEM32\mfc140d.dll
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winhand.cpp
Line: 210
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
---------------------------------------
この例外をどのようにエラー解析していけばよいか、原因も見当がつかず困っています。
上記にパスが示されていますが、使用しているマシンにそのようなフォルダは見当たりません。
エラーの内容は常に同一です。
なお、VisualStudio2015で空のMFCプロジェクトを作成し、OnPaint()で同様の処理を行った場合には問題なく動作します。
本来であれば新しくVS2015で作り直して一から検証した方がいいと思うのですが、実装済みの機能が多いため、できれば最終手段としたいと思います…。
よろしくお願い致します。
OS:Win10
開発環境:VisualStudio2015 C++
■以下OnPaint()中で呼び出している処理
引数にはピクチャコントロールへのアドレスを渡しています
---------------------------------------
void CCtfCheckSTCDlg::TestOnPaint(CWnd* pcWnd)
{
CDC* pDC = pcWnd->GetDC();
if(pDC != NULL)
{
BOOL blRet = pDC->DeleteDC();
}
}
---------------------------------------
お礼
ご回答ありがとうございました。 ご指摘頂いたように、ピクチャコントロールのハンドルの流れを調べてみたところ、起動時にGetDC()して取得したデバイスコンテキストをメンバ変数で管理し、別関数では再度同一のピクチャコントロールに対して(ReleaseDC()前に)GetDC()していたのが原因のようでした。 このGetDC()の再呼び出しを回避したところエラーは出なくなりました。 大変助かりました、ありがとうございました