- PR -

VC++60MFC:デバイス コンテキストの種類のことですが

1
投稿者投稿内容
砂嵐ジバ
常連さん
会議室デビュー日: 2005/12/03
投稿数: 25
投稿日時: 2006-03-04 01:45
お世話になります!
MSDNで検索しても分からなかったのでスレ立てました!
CDC* GetDC( );//CWnd::GetDC
GetDC はコンテキストを取得するごとにデフォルトの属性を与えるそうですが、
Q1:標準のデバイス コンテキストの属性を変更できる関数は、何になるのですか?
Q2:クラスのデバイス コンテキストの属性を変更できる関数は、何になるのですか?
Q3:プライベートのデバイス コンテキストの属性を変更できる関数は、何になるのですか?
Q5:クラスのデバイス コンテキストって何ですか?
Q6:プライベートのデバイス コンテキストって何ですか?
Q7:ウインドウ(ダイアログのコントロール)ごとに、
   必ず標準、クラス、プライベートのデバイス コンテキストを持つのですか?
初歩的な質問ですみませんがご教授ください!
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-03-04 02:37
根本的に誤解しておられるようです。
「標準のデバイス コンテキスト」の属性
「クラスのデバイス コンテキスト」の属性
「プライベートのデバイス コンテキスト」の属性
が存在するわけではありません。

標準の「デバイス コンテキストの属性」
クラスの「デバイス コンテキストの属性」
プライベートの「デバイス コンテキストの属性」
が存在するのです。

特定のデバイスコンテキストに対して設定した属性(描画色とか背景色とかブラシとかフォントとか)は
そのデバイスコンテキストに固有の属性であって、ReleaseDC()すると消えてしまいます。
これが「プライベートな属性」です。

GetDC()で取得したデバイスコンテキストは、
(1) Windowクラスが固有のデフォールト属性をもっていれば、それ
(2) 特に指定がなければ、システム全体のデフォールト属性
を持ちます。
これが、クラスの「デバイス コンテキストの属性」
標準の「デバイス コンテキストの属性」です。

Q1:標準のデバイス コンテキストの属性を変更できる関数は、何になるのですか?
SetSysColors()とか、SystemParametersInfo()など。

Q2:クラスのデバイス コンテキストの属性を変更できる関数は、何になるのですか?
普通は、RegisterClass()する時点でで指定する。
SetClassLong()やSetClassWord()で設定することもある。

Q3:プライベートのデバイス コンテキストの属性を変更できる関数は、何になるのですか?
SetTextColor()とか、SelectObject()とか、いろいろ。
(第一引数がDCになっているAPIは、だいたいがこれに該当する)

Q5〜Q7
質問の前提が間違っています。
デバイスコンテキストは多くの属性を持ちますが、それぞれの設定は個々のコンテキストに固有です(プライベート)。
個々の設定を行わないのであれば、
(1)クラス毎の設定
(2)システム全体の設定
が適用されます。
砂嵐ジバ
常連さん
会議室デビュー日: 2005/12/03
投稿数: 25
投稿日時: 2006-03-29 01:34
回答ありがとうございました。関数で確認しました!
ウインドウごとにCDCが作成されて、カストマイズして描画、
スクリーン座標ではDCはどのような扱いになるのでしょうか?
thisとかは使えないみたいですが・・・
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-29 09:42
引用:

スクリーン座標ではDCはどのような扱いになるのでしょうか?


スクリーン座標、クライアント座標の区別をどうすんの、という意味でしょうか??
それともデスクトップのデバイスコンテキストを取得したいという意味でしょうか??

前者は座標変換の API があるのでそちらを使ってください。
後者もデスクトップのウィンドウハンドルを取得できる API があるのでそちらを使ってください。
_________________
囚人のジレンマな日々
1

スキルアップ/キャリアアップ(JOB@IT)