早速のご回答ありがとうございます!
せっかくコードを提示していただいたのですが、私の環境ではウィンドウが覆いかぶさった状態のものが表示されてしまいました…。
このような感じです。
- fig2_1.JPG (23.47 KiB) 閲覧数: 7265 回
スクリーン座標(0, 0)にあるVisual C++のデバイスコンテキストを500ms間隔で取得し、AAA.exe(自プロセス)のクライアントエリアに描画しているのですが、やはり覆いかぶさったウィンドウ(この画像の場合ではAAA.exeのウィンドウ)ごと表示されてしまいます。
コードは次のようにしました。
コード:
#define TIMER_ID (100)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static HDC hdc, hdc_target;
PAINTSTRUCT ps;
POINT point = {0, 0};
static int width, height;
switch(msg)
{
//ウィンドウが作られた
case WM_CREATE:
//500ms毎にデバイスコンテキストを取得するためにタイマーを設定しておく
SetTimer(hWnd, TIMER_ID, 500, NULL);
break;
//指定時間になった
case WM_TIMER:
InvalidateRect(hWnd, NULL, TRUE);
break;
//ウィンドウが壊される
case WM_DESTROY:
PostQuitMessage(0);
break;
//ウィンドウの大きさが変更された
case WM_SIZE:
//ウィンドウの大きさを取得しておく
width = LOWORD(lp);
height = HIWORD(lp);
break;
//描画
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
hdc_target = GetWindowDC(WindowFromPoint(point));
BitBlt(hdc, 0, 0, width, height, hdc_target, 0, 0, SRCCOPY);
//********(2011/2/7/18:00編集)ReleaseDCを忘れていたので追加*************************
ReleaseDC(WindowFromPoint(point), hdc_target);
//********編集ここまで**************************************************************************
EndPaint(hWnd, &ps);
break;
//そのほか
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
return 0;
}
これは、環境によって得られる結果が異なるのでしょうか?