- ベストアンサー
ビットマップに描画をしてピクチャーコントロールに貼り付ける方法
- ビットマップに描画をしてピクチャーコントロールに貼り付けるためには、どのような方法があるか調べましたがうまくいかなかったようです。
- 質問者はC++のビットマップ描画に関するコードを記述しましたが、ピクチャーコントロールには描画がされていないとのことです。
- ビットマップに直線を描画することはできたが、ビットマップ全体を描画して貼り付ける方法がわからないとのことです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CStatic型とCBitmap型の変数は クラスのメンバー変数にします ViewクラスのOnCreateなどでm_ctlImageのインスタンスを作成しておきます ボタンのOnClickイベントで CDC* pDC = m_ctlImage.GetDC(); CDC* pMemDC = new CDC; pMemDC->CreateCompatibleDC( pDC ); m_ctlImage.ReleaseDC( pDC ); if (m_bmpImage.m_hObject != NULL ) { // 前回作成オブジェクトを破棄する m_bmpImage.DeleteObject(); } CRect rc; m_ctlImage.GetClientRect( &rc ); m_bmpImage.CreateCompatibleBitmap( pMemDC, rc.Width(), rc.Height() ); CBitmap* pold = pMemDC->SelectObject( &m_bmpImage ); CPen myPen(PS_SIOLID, 5, RGB( 0, 0, 255 ) ); PCen*pOldPen = pMemDC->SelectObejct( &myPen ); pMemDC->MoveTo(10, 10 ); pMemDC->Lineto( 100, 100 ); pMemDC->SelectObejct( pOld ); pMemDC->SelectObject( pOldPen ); pMemDC->DeleteDC(); delete pMemDC; m_ctlImage->setImage( m_bmpImage ); といった具合です ご質問のコードではm_ctlImage.GetDC()でアサートが発生しませんか ローカル変数のCBitmapでは関数から出た時点で破棄されてしまうので スタティックコントロールが再描画される時点では 無効なビットマップハンドルになってしまうため描画されないのだと思います
お礼
ありがとうございます、 ビットマップをパブリックの変数にしまして bitblt関数を使用することで解決しました、 ありがとうございます。