• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:winhand.cpp で発生する例外の原因)

winhand.cppで発生する例外の原因とは?

このQ&Aのポイント
  • VC6.0で開発されたMFCプロジェクトをVS2015用に変換したプロジェクトで、OnPaint()にて描画処理を追加した際に例外が発生しています。
  • 例外の内容はDebug Assertion Failed!というメッセージであり、エラー解析の方法や原因の特定に苦労しています。
  • 同様の処理を空のVS2015 MFCプロジェクトで行った場合には問題なく動作するため、問題の原因を特定するための手段を模索しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CWnd::GetDCでアサートチェックされるのは、ウィンドウハンドルが有効かどうかだけのはずです。 ・渡したポインタがCWnd(もしくはその派生クラス)のオブジェクトではない ・ピクチャーコントロールがまだ生成されていない ・ピクチャーコントロールがすでに破棄されている ・ピクチャーコントロールとコントロール変数がDDX等で結び付けられていない ・CWnd::fromHandleで生成された一時オブジェクトを変数に保存して、後で使いまわしている といった原因が考えられます。 オブジェクトのm_hWndの値を調べて、ピクチャーコントロールのハンドルと一致しているか調べてみましょう。

umiushi21
質問者

お礼

ご回答ありがとうございました。 ご指摘頂いたように、ピクチャコントロールのハンドルの流れを調べてみたところ、起動時にGetDC()して取得したデバイスコンテキストをメンバ変数で管理し、別関数では再度同一のピクチャコントロールに対して(ReleaseDC()前に)GetDC()していたのが原因のようでした。 このGetDC()の再呼び出しを回避したところエラーは出なくなりました。 大変助かりました、ありがとうございました

関連するQ&A