
お世話になっています。
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ちらつきについて
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
Minecraft 統合版(PC)の描画距...
-
エクセルで作った新しいウイン...
-
勝手にウィンドウが開いて止ま...
-
「アイテムは収集されました」...
-
ウインドウが閉じたことを知る方法
-
再インストールの仕方。アクセ...
-
TreeView表示がおかしいです。
-
リストコントロールの文字の大...
-
ウィンドウの破棄について
-
表示する方法
-
コンボボックス内の文字サイズ変更
-
Winodws GUI アプリを
-
hScrollBarのバックカラーを変...
-
PCで細かな目盛りを作図する方...
-
CSSでの大きさの単位について
-
仮想メモリが移動できない
-
WINAPI 他のウインドウを重ね...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
PlgBltでの透過
-
OpenGLでウィンドウハンドルの取得
-
メモリデバイスコンテキストを...
-
GetDC()とCreateCompatibleDC()
-
ちらつきについて
-
VBでFD、USBの有効・無効...
-
Active Basic デバイスコンテ...
-
ExtTextOut
-
デバイスコンテキストとデバイ...
-
VC++のTextOutの再描画の仕方
-
画面がチカチカする
-
ハードコピーをプログラムから...
-
メモリデバイスコンテキスト&...
-
C++でBMP解析
-
C 多角形を半透明に塗る方法
-
領域を塗りつぶしたい
-
コントロール内の文字の背景色
-
GetPixelに使うHDCの作り方
-
丸いボタンの表示でCPU100%
おすすめ情報