• 締切済み

OnPaint() とOnDraw()の違いについて

OnPaint内に記述した下記コードでビットマップが描画されますが、OnDraw内だと描画されません。 どうしてなのか教えてください。 お願いします。 void CAbcView::OnPaint() { HBITMAP myDIB; // ビットマップのハンドル HBITMAP oldDIB; HDC hDC; // デバイスコンテキストのハンドル HDC hCompatiDC; // メモリデバイスコンテキスト PAINTSTRUCT ps; // クライアント領域の描画に使う情報を保持 if(!m_BmpInfo) return; hDC = ::GetDC(m_hWnd);//これでもOK ::BeginPaint(m_hWnd,&ps); hCompatiDC = ::CreateCompatibleDC(hDC);//hDC); myDIB = ::CreateDIBitmap(hDC,&m_BmpInfo->bmiHeader, CBM_INIT,m_BmpImage,m_BmpInfo,DIB_RGB_COLORS); oldDIB=(HBITMAP)::SelectObject(hCompatiDC,myDIB); BitBlt(hDC,5,25,m_BmpInfo->bmiHeader.biWidth, m_BmpInfo->bmiHeader.biHeight,hCompatiDC,0,0,SRCCOPY); 略 } 環境 WIN98 VC++6.0 MFC にて

みんなの回答

  • GAIA9916
  • ベストアンサー率42% (17/40)
回答No.1

CAbcViewの基本クラスに、CViewを使っていると思いますが、 OnDraw(CDC *pDC)を呼ぶ前に、BeginPaint()を実行しているはずです。(MFC内) BeginPaint(),EndPaint()は、ウインドウ内の無効領域(描画しなければならない部分)を処理するために用意されていますから、素直にpDCを用いれば描画されると思います。 CView::OnPaint()のソースを覗いてみるとはっきりすると思いますよ。

mk1234
質問者

お礼

回答ありがとうございます。 原因が分かりました。 OnPaint内で動くかどうか確認したあとに、OnPaint内の記述を削除し、OnDrawにコピペしたためOnPaint関数がオーバーライドされOnDrawが呼ばれていませんでした。 お騒がせしました。

関連するQ&A