ただメモリデバイスコンテキストを作成し、"PatBlt"APIを使って黒く塗りつぶしたものを
画面本体に描画させようというものだけですが少し教えて下さい。
ソース参照:
HDC hdc, memDC;
hdc = GetDC(hWnd);
memDC = CreateCompatibleDC(hdc);
PatBlt(memDC, x, y, w, h, BLACKNESS);
BitBlt(hdc, dx, dy, w, h, memDC, sx, sy, SRCCOPY);
以下、解放処理.
(Blt関係においてのエラー処理はしてありますが特にエラーなし.)
ただこれだけなのですが画面は真っ白なままです。
また、以下の処理を追加すると一応黒くはなるのですが正しいのかわかりません・・・
HBMP hbmp;
hbmp = CreateCompatibleBitmap(memDC, w, h);
SelectObject(memDC, hbmp);
このような追加がなくてもいけるような気がするのですが。
何かソース上に問題がある、もしくはこうすればいい等のご指摘を頂ければと思い質問させて頂きました。
すいません。修正です。
hbmp = CreateCompatibleBitmap(memDC, w, h);
を、
hbmp = CreateCompatibleBitmap(hdc, w, h);
へ、修正致します。
> HBMP hbmp;
> hbmp = CreateCompatibleBitmap(memDC, w, h);
> SelectObject(memDC, hbmp);
> このような追加がなくてもいけるような気がするのですが。
いけません。
デバイスコンテキストとは、絵画にたとえるならば、画用紙を載せる画板のようなものであり、その上に画用紙を乗せないと、絵を描くことはできません。
で、画用紙はビットマップです。
CreateCompatibleBitmap で画用紙を作り、SelectObject で画板に乗せるという作業が必要になります。
#ちなみに CreateCompatibleBitmap の第一引数は、CreateCompatibleDC に渡したヤツ>memDC じゃなくて hdc ね
より正確に言うと、CreateCompatibleDC で作ったばかりの画板にも、画用紙は乗っています。
しかし、それは 1 * 1 ドットでモノクロ専用というものなので、使い物になりません。
そのため、新しい画用紙を作って、交換してやらなければならないのです。
シャノンさんありがとうございます。
おかげさまで納得致しました。
感謝です。
ツイート | ![]() |