Win32APIにて – プログラミング – Home

通知
すべてクリア

[解決済] Win32APIにて


しんご
 しんご
(@しんご)
ゲスト
結合: 21年前
投稿: 5
Topic starter  

どうしてもわかりません・・お力をお貸しください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
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

BitBlt()の戻り値は成功の場合非0では?


返信引用
n++
 n++
(@n )
ゲスト
結合: 21年前
投稿: 1
 

わかりやすく言い換えますと、
BitBlt()の戻り値は成功の場合0以外を返すのでは?


返信引用
しんご
 しんご
(@しんご)
ゲスト
結合: 21年前
投稿: 5
Topic starter  

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
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

ちゃんとMSDNを読みましょう。
http://msdn.microsoft.com/library/en-us/gdi/devcons_499f.asp

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


返信引用
しんご
 しんご
(@しんご)
ゲスト
結合: 21年前
投稿: 5
Topic starter  

すみません^^;; CreateCompatibleDCは同じHDCを作るもんだと勘違いしてました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました