DCへ描画した絵を記憶するには? – プログラミング – Home

DCへ描画した絵を記憶するには?
 
通知
すべてクリア

[解決済] DCへ描画した絵を記憶するには?


はむくん
 はむくん
(@はむくん)
ゲスト
結合: 14年前
投稿: 3
Topic starter  

=ヘッダ(抜粋)=
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オブジェクトを使いまわし、初期描画(?)は一回だけでし
た。
アドバイスをお願いします。


引用未解決
トピックタグ
デゴルガン
 デゴルガン
(@デゴルガン)
ゲスト
結合: 16年前
投稿: 20
 

OnInitialUpdate でも CreateCompatibleDC でビットマップ用の DC を作る必要がある
と思います。


返信引用
はむくん
 はむくん
(@はむくん)
ゲスト
結合: 14年前
投稿: 3
Topic starter  

回答ありがとうございます!

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);
}

こんなふうに修正して期待通りの動作を得ることができました!


返信引用
はむくん
 はむくん
(@はむくん)
ゲスト
結合: 14年前
投稿: 3
Topic starter  

違った・・・
×m_Bitmap.CreateCompatibleBitmap(&mDC, 1600, 1600);
○m_Bitmap.CreateCompatibleBitmap(dc, 1600, 1600);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました