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関数の戻り値に付いていまいちはっきりしていないのでわかる方がいらしたらよろしくお願いします。
No.1ベストアンサー
- 回答日時:
デバイスコンテキストは、ビットマップ、ブラシ、フォント、ペン、リージョンのオブジェクトを持っています。
それぞれのオブジェクトは種類ごとに入れ換える事が出来、通常、使いたいオブジェクトを作成した上、それをSelectObjectで指定して元の物と入れ換えます。
この時、使い終わったデバイスコンテキストを破棄してしまうなら入れ換えたオブジェクトを元に戻す必要はありません。
しかし、デバイスコンテキストを使い続けたまま一時的にブラシを変更、変更したブラシで描画した後、元のブラシに戻す、と言う使い方をする場合もあります。
そこで、SelectObjectは「正常に入れ換え出来たら、入れ換える前のオブジェクトを返す」と言う仕様になっているのです。入れ換える前のオブジェクトが返されれば、そのオブジェクトを指定する事によって、元に戻す事が出来ますので。
なお、入れ換え(切り離し)は、ビットマップ、ブラシ、フォント、ペン、リージョンごと、種類別に別々に行われます。ブラシを入れ換えてもビットマップやフォントは影響を受けません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
Excel VBAでマウスの左クリック...
-
現在アクティブになっているオ...
-
Excel2007 でのチェックボック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
【エクセル】複数のTextBoxに共...
-
構造体の静的な初期化
-
GDIオブジェクトが増える……
-
コードでオブジェクトを最前面に
-
日本語の文字化けを直す方法
-
マウス位置イベントによるポッ...
-
「SHDocVw」の意味
-
PowerpointVBAで指定のShapeオ...
-
WebBrowser内のフォームをsubmi...
-
Accessのフォーム上にエクセル...
-
VBA:ホームページ内のデータテ...
-
C#で画像をクリップボードへの...
-
エクセルVBAでセル番地を指定し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
Excel2007 でのチェックボック...
-
Access からオブジェクトとして...
-
エクセルVBAでセル番地を指定し...
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
日本語の文字化けを直す方法
-
現在アクティブになっているオ...
-
Accessのフォーム上にエクセル...
-
文字列で小数点以下の0を削除し...
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
Excelを閉じるときVBAプロジェ...
-
コードでオブジェクトを最前面に
-
PowerpointVBAで指定のShapeオ...
-
Imageコントロールにグラフを表...
-
VBAで選択範囲外の図形(オブジ...
-
C#で画像をクリップボードへの...
-
WSH or VBの質問
おすすめ情報