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. 如文档所示,CreateCompatibleDC创建一个 1x1 像素的新内存图像。对于您的 100x100 图像块来说,这显然不够大。您可能应该使用CreateCompatibleBitmap.

  2. 传递给 BitBlt 的坐标是:

    • 目的地的左上角(nXDest,nYDest)
    • 副本的宽度/高度 (nWidth,nHeight)
    • 源的左上角 (nXSrc,nYSrc)

    以该顺序。您似乎将 nXSrc/nYSrc 与 nWidth/nHeight 混淆了。检查你的号码。

  3. 像这样肆意滥用桌面表面实际上可能 (1) 被禁止和 (2) 产生意想不到的结果。小心你试图达到的目标。

于 2012-04-07T07:57:44.403 回答