1

画面の一部をコピーして変更し、それらの部分を画面にコピーして戻そうとしています。これはWindowsで、C++を使用しています。

私のコードの一般的な構造は次のようになります。

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)で始まる画面の100x100の部分が、画面のランダムな部分にコピーされますただし、これは機能しません。私は何が間違っているのですか?

4

1 に答える 1

2

このコードにはいくつかの問題があります。

  1. ドキュメントに示されているように、CreateCompatibleDC1x1ピクセルの新しいメモリ内イメージを作成します。これは明らかに、100x100の画像チャンクには十分な大きさではありません。おそらくを使用する必要がありますCreateCompatibleBitmap

  2. BitBltに渡される座標は次のとおりです。

    • 宛先の左上隅(nXDest、nYDest)
    • コピーの幅/高さ(nWidth、nHeight)
    • ソースの左上隅(nXSrc、nYSrc)

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

  3. このようなデスクトップ表面のワンタン乱用は、実際には(1)許可されておらず、(2)予期しない結果をもたらす可能性があります。達成しようとしていることに注意してください。

于 2012-04-07T07:57:44.403 に答える