アプリ版:「スタンプのみでお礼する」機能のリリースについて

ビットマップに描画をしてピクチャーコントロールに貼り付けるためには
どうすればよいでしょうか?

ネットで検索しましたそして、
下のようなコードを書きましたがうまくゆきません。


void CXXXView::OnButton()
{


CStatic m_ctlImage; // ピクチャーボックスに関連付けした変数
CBitmap m_bmpImage; // ピクチャーボックスに貼り付けるイメージ
CDC m_dcImage; // Bitmap描画用のDC


CDC* pDC = m_ctlImage.GetDC();
m_dcImage.CreateCompatibleDC(pDC);

CRect Cltsz;
picture1.GetClientRect(&Cltsz);

m_bmpImage.CreateCompatibleBitmap(pDC,Cltsz.Width(),Cltsz.Height());

CBitmap* pOld=m_dcImage.SelectObject(&m_bmpImage);


CPen myPEN(PS_SOLID,5,RGB(0,0,255));
CPen* oldPEN=m_dcImage.SelectObject(&myPEN);
m_dcImage.MoveTo(10,10);
m_dcImage.LineTo(100,100);

m_dcImage.SelectObject(oldPEN);

m_dcImage.SelectObject(pOld);

m_ctlImage.SetBitmap(m_bmpImage);

}

この様にしましたが、ピクチャーコントロールには
何も描画されません、

何故でしょうか?

VS2005で、ボタンをクリックした
イベントで描画する場合です、

直線とかは、問題なく描画できました。

ビットマップに描画して貼り付けたいのです、

よろしくお願いします

A 回答 (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では関数から出た時点で破棄されてしまうので
スタティックコントロールが再描画される時点では 無効なビットマップハンドルになってしまうため描画されないのだと思います
    • good
    • 0
この回答へのお礼

ありがとうございます、

ビットマップをパブリックの変数にしまして

bitblt関数を使用することで解決しました、

ありがとうございます。

お礼日時:2008/06/14 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A