2012-04-07 14 views
0

画面の一部をコピーして修正し、その部分を画面に戻してコピーしようとしています。これは、C++を使用してウィンドウに表示されます。BitBltを使用して画面から画面に書き込む

HDC hdcDesktop = GetDC(NULL); 
HDC hdcTemp = CreateCompatibleDC(hdcDesktop); 

BitBlt(hdcTemp, 0, 0, 100, 100, hdcDesktop, 100, 100, SRCCOPY); 
BitBlt(hdcDesktop, rand() % 1920, rand() % 1080, 100, 100, hdcTemp, 0, 0, SRCCOPY); 

この画面のいくつかのランダムな部分に(100、100)で始まる画面の100×100の部分をコピーしてください:

私のコードの一般的な構造は次のようになります。しかし、これはうまくいきません。私は間違って何をしていますか?

+1

CreateCompatibleBitmap + SelectObjectを忘れました。 http://msdn.microsoft.com/en-us/library/dd183402%28v=VS.85%29.aspx –

+0

Ahaaa。私は以前はそのページを見ていましたが、混乱してしまったので、少し上をもう一度見直しました。ありがとう! –

答えて

1

このコードのいくつかの問題があります。文書によって示されるよう

  1. CreateCompatibleDCは、1x1の画素である新しいメモリ内の画像を作成し、。これは明らかに100x100の画像の塊には十分ではありません。おそらくCreateCompatibleBitmapを使用してください。 BitBlt関数に渡さ

  2. 座標は、次のとおりの

    • 先の左上cornder(nXDest、nYDest)コピーの
    • 幅/高さ(nWidth、nHeight)
    • 左上ソーセージ(nXSrc、nysrc)

    の順である。あなたはnXSrc/nYSrcをnWidth/nHeightと混同しているようです。あなたの番号を確認してください。

  3. このようなデスクトップ表面の酷使は実際には(1)許可されず、(2)予期しない結果が生じる可能性があります。達成しようとしていることに注意してください。