2012-04-07 87 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)产生意想不到的结果。要小心你试图达到的目标。