どうしてもわかりません・・お力をお貸しください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にすると通ります。
なにがいけないと考えられますか? 特殊なことをしたといえば、多角形リージョンでウィンド
ウを多角形にしています。
BitBlt()の戻り値は成功の場合非0では?
わかりやすく言い換えますと、
BitBlt()の戻り値は成功の場合0以外を返すのでは?
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));
で埋め尽くしてみてもダメでした。。
ちゃんとMSDNを読みましょう。
http://msdn.microsoft.com/library/en-us/gdi/devcons_499f.asp
CreateCompatibleDCは,Compatibleなデバイスコンテキストを作るだけです。
ちゃんと必要なサイズのビットマップを作って,選択してやる必要があります。
すみません^^;; CreateCompatibleDCは同じHDCを作るもんだと勘違いしてました。
できました!ありがとうございました!