=ヘッダ(抜粋)=
class CTest001View : public CScrollView
{
public:
CBitmap m_Bitmap;
=ソース(抜粋)=
void CTest001View::OnDraw(CDC* pDC)
{
CDC tmpDC;
tmpDC.CreateCompatibleDC(pDC);
CBitmap *tmpBMap = tmpDC.SelectObject(&m_Bitmap);
//とりあえずBitBltするテスト
pDC->BitBlt(0,0,1000,1000,&tmpDC,0,0,SRCCOPY);
}
void CTest001View::OnInitialUpdate()
{
CDC *dc = GetDC();
m_Bitmap.CreateCompatibleBitmap(dc, 1600, 1600);
CBitmap *oldBMap = dc->SelectObject(&m_Bitmap);
//試しにFillRectしてみる。実際にはここで図画作成処理を行う。
dc->FillRect(CRect(0,0,1600,1600),&CBrush(RGB(255,0,0)));
dc->SelectObject(oldBMap);
ReleaseDC(dc);
}
あまり変更が無いが、毎回書き直すにはヘビーな図画をCBitmapオブジェクトへ
保持しておこうと考えたのですが、上記のソースを実行しても1000x1000の真っ黒な
四角が表示されるだけです。
初期化されたCBitmapオブジェクトが表示されてるだけの様子。
以前、見かけたソースコードのアイデアをそのままパクったはずなのですが上手くいき
ません。
そのコードも1つのCBitmapオブジェクトを使いまわし、初期描画(?)は一回だけでし
た。
アドバイスをお願いします。
OnInitialUpdate でも CreateCompatibleDC でビットマップ用の DC を作る必要がある
と思います。
回答ありがとうございます!
void CTest001View::OnInitialUpdate()
{
CDC *dc = GetDC();
CDC mDC;
mDC.CreateCompatibleDC(dc);
m_Bitmap.CreateCompatibleBitmap(mDC, 1600, 1600);
CBitmap *oldBMap = mDC.SelectObject(&m_Bitmap);
mDC.FillRect(CRect(0,0,1600,1600),&CBrush(RGB(255,0,0)));
mDC.SelectObject(oldBMap);
ReleaseDC(dc);
}
こんなふうに修正して期待通りの動作を得ることができました!
違った・・・
×m_Bitmap.CreateCompatibleBitmap(&mDC, 1600, 1600);
○m_Bitmap.CreateCompatibleBitmap(dc, 1600, 1600);