
お世話になっています。
GetDC(NULL)とCreateCompatibleDC(NULL)で得られるhdcの違いがよくわかりません。
以下のプログラムA,Bで得られるのhDCw1,hDCw2に違いはありますか?
A:
hDCw1 = CreateCompatibleDC(NULL); //現在の画面と互換性のあるメモリデバイスコンテキスト
hDCw2 = CreateCompatibleDC(NULL);
<<hDCw1,hDCw2を使用>>
DeleteDC(hDCw1);
DeleteDC(hDCw2);
B:
hdc = GetDC( NULL );// 画面全体を表すデバイスコンテキスト
hDCw1 = CreateCompatibleDC(hdc);
hDCw2 = CreateCompatibleDC(hdc);
<<hDCw1,hDCw2を使用>>
ReleaseDC( NULL, hdc );// 取得した HDCの開放
DeleteDC(hDCw1);
DeleteDC(hDCw2);
No.2ベストアンサー
- 回答日時:
こんばんは。
御礼頂き感謝いたします。>>プログラムAとBは「常に同じ」ということでしょうか、それとも、「xxxという環境では同じ」ということでしょうか?たとえば、「xxx」は24ビットカラーとか、1024x768などの制約があるのでしょうか?
私のディスプレイは1440x900x32でしたが、両方同じでした。
ただ、もう一度立ち戻って調べ直しましたが、「常に同じ」とは断言出来なさそうです。と言うのも、
A:
・hDCw1 = CreateCompatibleDC(NULL); //現在の画面と互換性のあるメモリデバイスコンテキスト
↑「現在の画面」と言うのが「現在のデスクトップ」である事を意味しているのならば、B:とまったく同じになる筈です。
B:ではGetDC(NULL)でデスクトップのデバイスコンテキストを取っているからです。
しかし、気になったのは「現在の~」と付くからには「現在ではない~」のも有る様で、
「マルチモニター」
http://ww8.tiki.ne.jp/~elbe2/sumai/dell3.html
の様な状況も含めると、私にも分かりません。
「CreateCompatibleDCに対する議論」
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …
どちらかと言えば、HDCの中身を知るよりも、使う手順を覚えて使う事に徹して来ましたので、厳密な意味でHDCがどうなっているのかは、チョッと私には分かりませんな。
>ただ、もう一度立ち戻って調べ直しましたが、「常に同じ」とは断言出来なさそうです。
実験ありがとうございます。また、有用なページのご紹介ありがとうございます。
>「CreateCompatibleDCに対する議論」
>http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …
難しくて私には、何が違うのか、よくわかりませんが、とにかく
・何かしら違う。
・でもどちらでも問題なく動く場合が多く、実際に差がない場合もある。
ということですね(苦笑)。
No.1
- 回答日時:
こんばんは。
試して見ましたが、違いは無い様です。HDCに対してGetDeviceCaps()を使うと、HDCの詳細を確認出来ます。
「GetDeviceCaps」
http://msdn.microsoft.com/ja-jp/library/cc428670 …
以下参考に
#include<windows.h>
#define ARRAYCOUNT(a) (sizeof(a)/sizeof(a[0]))
//両方のデバイスコンテキストから詳細を取ってみる
void Check(HDC hDC_A, HDC hDC_B)
{
//適当な項目を調べてみる
const int arr[] =
{
HORZRES, VERTRES, BITSPIXEL
};
for(int i = 0; i < ARRAYCOUNT(arr); ++i)
{
const int nA = GetDeviceCaps(hDC_A, arr[i]);
const int nB = GetDeviceCaps(hDC_B, arr[i]);
}
}
//お試し
void main()
{
//現在の画面と互換性のあるメモリデバイスコンテキスト
HDC hDC_A = CreateCompatibleDC(NULL);
//画面全体を表すデバイスコンテキスト
HDC hDC_w = ::GetDC(NULL);
HDC hDC_B = CreateCompatibleDC(hDC_w);
Check(hDC_A, hDC_B);
//後始末は忘れずに
}
回答ありがとうございます。
>こんばんは。試して見ましたが、違いは無い様です。
テストありがとうございます。ところで、プログラムAとBは「常に同じ」ということでしょうか、それとも、「xxxという環境では同じ」ということでしょうか?たとえば、「xxx」は24ビットカラーとか、1024x768などの制約があるのでしょうか?もしも、ご存知でしたらお教えください。
>HDCに対してGetDeviceCaps()を使うと、HDCの詳細を確認出来ます。
便利な関数があるんですね。勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- PHP 書籍よりも より良い htmlspecialchars の変更を 1 2022/04/18 02:28
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハードコピーをプログラムから...
-
デスクトップイメージをメモリ...
-
ダブルバッファの作り方
-
コンテキスト依存とは?
-
領域を塗りつぶしたい
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コンボボックス内の文字サイズ変更
-
フォントの大きさ
-
Minecraft 統合版(PC)の描画距...
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
VB.NET2005 TextBox 高さ(Heig...
-
[VB.net] DataGridViewの列ヘッ...
-
ActiveXコントロールを.NETにイ...
-
フォームでPDFを表示させた...
-
DateTimePickerでに年月までし...
-
エクセルである行が急に消えて...
-
VBAのフォント変更(エクセルか...
-
VB6,リストボックスの特定行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面がチカチカする
-
BitBlt関数について教えてください
-
コンテキスト依存とは?
-
GetDC()とCreateCompatibleDC()
-
メモリデバイスコンテキストを...
-
C 多角形を半透明に塗る方法
-
VBでFD、USBの有効・無効...
-
画像処理 ビットマップ ダブ...
-
ダイアログにビットマップを貼...
-
Windowsプログラミング 画面描...
-
コントロール内の文字の背景色
-
領域を塗りつぶしたい
-
OpenGLでウィンドウハンドルの取得
-
Rectangleで、リソースが解放さ...
-
Win32APIにて、アイコンの情報...
-
ビットマップファイルの印刷方...
-
ビットマップ(表示速度とサイズ)
-
ハードコピーをプログラムから...
-
VBでデスクトップアクセサリを...
-
VC++でBitmapとText文字を表示...
おすすめ情報