Win32APIにて

[戻る]
しんご 2003/12/22(月) 22:42:09
どうしてもわかりません・・お力をお貸しくださいm(_ _)m

hdc_1 = GetDC(g_hWnd);
hdc_2 = CreateCompatibleDC(hdc_1);
SetRect(&rect, 0, 0, SCREEN_DX, SCREEN_DY);
FillRect(hdc_2, &rect, (HBRUSH) GetStockObject(GRAY_BRUSH));
if( BitBlt(hdc_1, 0, 0, SCREEN_DX, SCREEN_DY, hdc_2, 0, 0, SRCCOPY) != 0 )
GetLastErrorMessage();

ReleaseDC(g_hWnd, hdc_1);
DeleteDC(hdc_2);

これは、hdc_2で塗りつぶしたものをhdc_1に転送するだけのものですが、どうしてもラストエ
ラーメッセージに引っかかってしまいます。エラーは”パラメーターが不正です” これを
BALCKNESSにすると通ります。

なにがいけないと考えられますか? 特殊なことをしたといえば、多角形リージョンでウィンド
ウを多角形にしています。

n [E-Mail] 2003/12/23(火) 08:27:55
BitBlt()の戻り値は成功の場合非0では?

n++ 2003/12/23(火) 12:07:03
わかりやすく言い換えますと、
BitBlt()の戻り値は成功の場合0以外を返すのでは?

しんご 2003/12/23(火) 14:48:07
hdc_1 = GetDC(g_hWnd);
hdc_2 = CreateCompatibleDC(hdc_1);
SetRect(&rect, 0, 0, SCREEN_DX, SCREEN_DY);
FillRect(hdc_2, &rect, (HBRUSH) GetStockObject(GRAY_BRUSH));
if( BitBlt(hdc_1, 0, 0, SCREEN_DX, SCREEN_DY, hdc_2, 0, 0, SRCCOPY) == 0 )
GetLastErrorMessage();

ReleaseDC(g_hWnd, hdc_1);
DeleteDC(hdc_2);

>BitBlt()の戻り値は成功の場合非0では?
そうでした^^;;

書き換えましたら、GetLastErrorMessage()に引っかからなくなりました。
BitBltは成功しているものの、FillRect()でhdc_2をグレイで埋め尽くしたものをコピーして
もそれがhdc_1に反映されませんでした。
hrgn = CreatePolygonRgn(g_points_window_frame, 12, ALTERNATE);
FillRgn(hdc_2, hrgn, (HBRUSH)GetStockObject(GRAY_BRUSH));
で埋め尽くしてみてもダメでした。。

YuO [E-Mail] 2003/12/23(火) 14:59:34
ちゃんとMSDNを読みましょう。
http://msdn.microsoft.com/library/en-us/gdi/devcons_499f.asp

CreateCompatibleDCは,Compatibleなデバイスコンテキストを作るだけです。
ちゃんと必要なサイズのビットマップを作って,選択してやる必要があります。

しんご 2003/12/23(火) 16:10:38
[[解決]]
すみません^^;; CreateCompatibleDCは同じHDCを作るもんだと勘違いしてました。

できました!ありがとうございました!

古いスレッドには追加発言できません。