メモリDCからpDCに表示2 – プログラミング – Home

通知
すべてクリア

[解決済] メモリDCからpDCに表示2


りもん
 りもん
(@りもん)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

お世話になってます、環境はWinXP VC7 MFC Doc/View です。

メモリDC上にある長方形等をpDCに表示したいのですが。

// TODO: この場所にネイティブ データ用の描画コードを追加します。
CDC mDC;//メモリDC作成
CBitmap cb;
CRect rect;
GetClientRect(&rect);

//メモリDC作成
if(mDC==0)
{
mDC.CreateCompatibleDC(pDC);
AfxMessageBox(TEST);
}
cb.CreateCompatibleBitmap(&mDC,2000,2000);
mDC.SelectObject(&cb);
CBrush NewBrush;
CBrush *OldBrush;
NewBrush.CreateSolidBrush(RGB(0,255,0));//緑ブラシ
OldBrush=mDC.SelectObject(&NewBrush);
mDC.Rectangle(0,0,100,100);
mDC.SelectObject(OldBrush);
NewBrush.DeleteObject();

pDC->BitBlt(0,0,300,300,&mDC,0,0,SRCCOPY);//メモリDC→pDC転送

という風にしてもpDC上の長方形は色(緑)が適用されずに
グレーになってしまいます。
メモリDC上の2000*2000のbitmapを作成した時点でモノクロ画像しか扱えないようなので
すが
通常のDCと同じ色数を扱うにはどうすればよいのでしょうか?


引用未解決
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

> if(mDC==0)
これ、コンパイル時に問題ないんですか? CDC mDC; と宣言してるんでしょ?
クラス CDC のインスタンスが整数値と比べられるんでしょうか?
仮に比べられるとしたら、m_hDC とでしょうから、あなたの期待通りのコードとは
違うと思うのですが如何でしょうか?

> cb.CreateCompatibleBitmap(&mDC,2000,2000);
は問題ですね。
cb.CreateCompatibleBitmap(pDC, 2000, 2000);
と書く事をお薦めします

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200306/03060039.txt

が参考になるでしょう。
作成した直後のメモリーDCには1X1のモノクロビットマップが選択済みの状態なので
このDCにコンパチブルなビットマップを作っても思い通りには色は付きません

>メモリDC上の2000*2000のbitmapを作成した時点でモノクロ画像しか扱えないようなので
>すが
DIB か DIBSection かを使うといいかもしれません
CBitmap は普通は DDB を扱うためのクラスですから DDB の制限は避けられません


返信引用
りもん
 りもん
(@りもん)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

すみません書き込み遅れました

>cb.CreateCompatibleBitmap(pDC, 2000, 2000);
>と書く事をお薦めします
ここを書き換えるだけで色が使えるようになりました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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