プロが教える店舗&オフィスのセキュリティ対策術

SDKについて勉強中なのですSelectObject関数についてどうしても引っかかることがあります。
とあるサイトにはSelectObjectは、前に結びついていたハンドルを戻り値とすると書いてありました。
http://kerochan.no-ip.com/vcsdk/letsprog/chap14. …
に書いてある例で、
*******************************************
hBit = CreateCompatibleBitmap(hdc,ScrnSize.right,ScrnSize.bottom);
SelectObject(memdc,hBit);
SelectObject(memdc,hBit);*****(1)
hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
hDefBrush = SelectObject(memdc,hBrush);*****(2)
PatBlt(memdc,0,0,ScrnSize.right,ScrnSize.bottom,PATCOPY);
ReleaseDC(hwnd,hdc);
SelectObject(memdc,hDefBrush);*****(3)
DeleteObject((HGDIOBJ)hBrush);
******************************************
となっているのですが、(1)でmemdcと関連付けたビットマップハンドル(hBit)は、(2)でmemdcに新たにブラシハンドル(hBrush)と関連付けることによって切り離されてしまうのでしょうか?それとも切り離されるものは種類単位なのでしょうか?ブラシハンドルを関連付けたら前のブラシハンドルが返って来るとか・・
SelectObject関数の戻り値に付いていまいちはっきりしていないのでわかる方がいらしたらよろしくお願いします。

A 回答 (1件)

デバイスコンテキストは、ビットマップ、ブラシ、フォント、ペン、リージョンのオブジェクトを持っています。



それぞれのオブジェクトは種類ごとに入れ換える事が出来、通常、使いたいオブジェクトを作成した上、それをSelectObjectで指定して元の物と入れ換えます。

この時、使い終わったデバイスコンテキストを破棄してしまうなら入れ換えたオブジェクトを元に戻す必要はありません。

しかし、デバイスコンテキストを使い続けたまま一時的にブラシを変更、変更したブラシで描画した後、元のブラシに戻す、と言う使い方をする場合もあります。

そこで、SelectObjectは「正常に入れ換え出来たら、入れ換える前のオブジェクトを返す」と言う仕様になっているのです。入れ換える前のオブジェクトが返されれば、そのオブジェクトを指定する事によって、元に戻す事が出来ますので。

なお、入れ換え(切り離し)は、ビットマップ、ブラシ、フォント、ペン、リージョンごと、種類別に別々に行われます。ブラシを入れ換えてもビットマップやフォントは影響を受けません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これで先に進めそうです^^

お礼日時:2004/02/24 15:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!