
お世話になっています。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Rectangleで、リソースが解放さ...
-
画像処理 ビットマップ ダブ...
-
コンテキスト依存とは?
-
メモリデバイスコンテキストを...
-
画面がチカチカする
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
エクセルで作った新しいウイン...
-
[VB.net] DataGridViewの列ヘッ...
-
VC++でタスクバーに表示させな...
-
コンボボックス内の文字サイズ変更
-
指定したインアクティブウィン...
-
皆さん、おはようございます♪ ...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
msgboxの表示位置
-
閉図形の座標の配列が右回りか...
-
Excelの上下を固定したい
-
Minecraft 統合版(PC)の描画距...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
画面がチカチカする
-
VBでFD、USBの有効・無効...
-
ハードコピーをプログラムから...
-
WindowsAPIでの画像表示について
-
メモリデバイスコンテキストを...
-
画像処理 ビットマップ ダブ...
-
VC++のTextOutの再描画の仕方
-
Rectangleで、リソースが解放さ...
-
デバイスコンテキストに関して2...
-
SetWindowRgn()関数について。
-
ウインドウ内全体を一定時間で...
-
ダイアログにビットマップを貼...
-
領域を塗りつぶしたい
-
usbデバイスとの通信
-
メモリデバイスコンテキスト&...
-
TextOutについて
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
おすすめ情報