3Dゲームのソリューションとは別の(Windows XP以前にも対応する)アプリケーションを作っているときに思った事なのですが
GDIで
msdnのSelectObjectの解説には
(http://msdn.microsoft.com/ja-jp/library/cc410576 …)
-------------
この関数は、指定されたのと同じタイプで、それまで選択されていたオブジェクトを返します。アプリケーションは新しいオブジェクトを使い終えたら、必ず元の(既定)オブジェクトに置き換えるべきです。
-------------
と書いてあるのですが
SetBkModeやSetTextColorについてはそう言った表記がありません。
実際には、これらはReleaseDCやEndPaintの前に初期状態に戻すべきなのでしょうか?
戻さなくても全く問題はないでしょうか?
No.1ベストアンサー
- 回答日時:
SelectObjectするという事は、自分でリソース(ペンやブラシ)を作成しそのリソースを設定すると思います。
(※例外もあるけど)
自分で作成したリソースは、開放(DeleteObject)する必要があります。
質問のSelectObject説明は、この開放時にDCに関連づけたままやっちゃ駄目よ。と(遠まわしに)説明しているのです
説明の『新しいオブジェクトを使い終えたら』というのは、リソースを使い終えたらという事。
リソースを使い終えたら、解放処理をするのだがDCに関連付いているので
元の値に戻して関連付けを解除しないといけません。
上記を踏まえて、SetBkModeやSetTextColorを考えると
開放なんてする必要ないので、元にもどす必要もない。
という事です。
どうもありがとうございます♪
なるほど、そういうことだったのですか。
SelectObjectしておいて開放時にDCに関連づけたままはやばいですね。失敗するだったか、XPだとゾンビ化するだったか忘れましたが、そういう事はしっかりと配慮しています。
アプリケーション開始時にstatic専用のクラスで確保し、終了時に解放、とすれば、毎回生成するコードなしで、SelectObjectで挟み込むだけでOKとなるので、頻繁に使うやつはそのようにしています。
とりあえず、SetBkModeやSetTextColorなどに関しては、数値の設定だけなので問題ない、というわけですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) エクセル VBAの構文について 2 2023/02/10 18:26
- Wi-Fi・無線LAN Windows10でWi-Fi6Eが使えない!?そもそもWi-Fi6Eってなんでしたっけ?教えて! 1 2023/01/27 20:48
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
vb.net オブジェクト指向につい...
-
Excelで =EMBED("Acrobat Docu...
-
error C2712: オブジェクト ア...
-
ビジュアルC++でボタンの有...
-
プリコンパイルされたSQL文を取...
-
多人数のじゃんけんプログラム
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
JSPのout.printについて
-
Listに格納されているオブジェ...
-
空の文字列とnullと""
-
ADO オブジェクトの渡し方
-
VBA 同じ名前のオブジェクトを...
-
VBからBATファイルを起動して戻...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
戻り値がクラスオブジェクト
-
エプソンVP-930のESC/Pの操作に...
-
Date型オブジェクトから日付の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報