• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CreateCompatibleDCを初期化時にしたい(MFC))

MFCでJPEG画像を表示するプログラムの初期化方法について

このQ&Aのポイント
  • MFCでJPEG画像を表示するプログラムの初期化方法について教えてください。
  • 現在はOnPaint()関数内でCreateCompatibleDC関数を使用して初期化を行っていますが、PreCreateWindow関数などの初期化関数内に移したいと考えています。
  • また、CreateCompatibleDC関数を再描画のたびに呼び出すことも試しましたが、異常終了してしまいます。スマートな初期化方法をご教示いただけないでしょうか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

PreCreateWindowで CPaintDC(this)としてもエラーになるのは当然です CPaintDCはウィンドウハンドルを必要とします しかし PreCreateWindowではまだウィンドウハンドルは作成されていません # ウィンドウ作成の前処理なので当然ですが ・・・ WM_CREATEメッセージに対するイベントハンドラOnCreateかCreateで処理します OnCreateでやるなら int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) {   if (CView::OnCreate(lpCreateStruct) == -1)     return -1;   // TODO: ここに特定な作成コードを追加してください。   return 0; } といったスケルトンを VC++が作成してくれるので TODOコメントの部分で DCの初期化処理を行いましょう int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) {   if (CView::OnCreate(lpCreateStruct) == -1)     return -1;   // TODO: ここに特定な作成コードを追加してください。   m_Image.Load("test.jpg");   m_pImageBitmap = CBitmap::FromHandle( m_Image );   CClientDC dc(this);   m_ImageMemDC.CrateCompatibleDC( &dc );   m_ImageMemDC.SelectObject( m_pImageBitmap );   return 0; } といった具合です 本来は m_ImageMemDC.SelectObject( m_pImageBitmap ) の戻り値も記憶しておいて m_ImageMemDCを破棄する際に選択を元に戻すのがセオリーです

jeddom
質問者

お礼

うまくいきました、ありがとうございます!