お世話になってます、環境は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と同じ色数を扱うにはどうすればよいのでしょうか?
> 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 の制限は避けられません
すみません書き込み遅れました
>cb.CreateCompatibleBitmap(pDC, 2000, 2000);
>と書く事をお薦めします
ここを書き換えるだけで色が使えるようになりました。
ありがとうございました。