2012-04-07 97 views
0

我試圖複製屏幕的各個部分,修改它們,然後將這些部分複製回屏幕。這是在Windows中,使用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 – 2012-04-07 06:16:07

+0

Ahaaa。我在前面看過那個頁面,但感到困惑,所以我更清楚地重新閱讀頂部。謝謝! – 2012-04-07 06:32:51

回答

1

沒有與此代碼的幾個問題:

  1. 正如文檔指出,CreateCompatibleDC創建一個新的內存映像是1x1像素的。對於100x100的圖像來說,這顯然不夠大。您應該使用CreateCompatibleBitmap

  2. 傳遞到的BitBlt的座標是:

    • (nXDest,nYDest)
    • 的拷貝寬度/高度(nWidth,nHeight參數)目的地的左上cornder
    • 的左上角soruce(nXSrc,nYSrc)

    按此順序。您似乎將nXSrc/nYSrc與nWidth/nHeight混淆。檢查你的號碼。

  3. 像這樣濫用桌面的東西實際上可能(1)被禁止,(2)產生意想不到的結果。要小心你試圖達到的目標。