gpt4 book ai didi

c++ - 如何同时使用三个 HDC

转载 作者:太空狗 更新时间:2023-10-29 23:18:19 26 4
gpt4 key购买 nike

我希望能够将内容打印到两个 hdc,比如 hdcBufhdcBuf2。然后我想把BitBlthdcBuf放到hdcBuf2上,然后把BitBlthdcBuf2放到hdc,也就是客户端窗口。这是我现在的代码:

hdc = GetDC(hWnd);

hdcBuf2 = CreateCompatibleDC(hdc);
hbmBackBM2 = CreateCompatibleBitmap(hdc, client.right, client.bottom);
hbmOldBackBM2 = (HBITMAP)SelectObject(hdcBuf2, hbmBackBM2);

hdcBuf = CreateCompatibleDC(hdcBuf2);
hbmBackBM = CreateCompatibleBitmap(hdcBuf2, client.right, client.bottom);
hbmOldBackBM = (HBITMAP)SelectObject(hdcBuf, hbmBackBM);
Graphics g(hdcBuf);
Graphics g2(hdcBuf2);
//drawing stuff with both g and g2
BitBlt(hdcBuf2,0,0,client.right,client.bottom,hdcBuf,0,0,SRCCOPY);
BitBlt(hdc,0,0,client.right,client.bottom,hdcBuf2,0,0,SRCCOPY);

所有的 HDC 和 HBITMAP 都是全局的,并在 WM_DESTROY 中正确销毁,并且 Graphics 对象是 GDI+

我需要所有这些 hdc 的原因是我需要同时将一个对象打印在另一个对象之上。我有一个平铺 map ,我在绘制时循环了它的一部分。我需要打印可能位于多个图 block 上的图 block 和对象,但图 block 必须在对象下方。只有一个 hdcBuf,我需要遍历 map 两次才能执行此操作。

现在,我的代码只打印 hdcBuf 的内容,即瓷砖上的对象。
预先感谢您的帮助:)

最佳答案

BitBlt 用提供的设备上下文覆盖目标设备上下文的内容。 (或者更确切地说,由参数定义的区域内的内容)它不会尝试将两个上下文“混合”在一起。因此,在您第一次调用 BitBlt 时,您将 hdcBuf 的内容绘制到 hdcBuf2 上(销毁其内容),然后绘制 hdcBuf2 over hdc(也破坏了它的内容)。

您需要遍历 map 两次才能执行此操作。请记住,您的示例也有两个循环——它们就在 BitBlt 中。

关于c++ - 如何同时使用三个 HDC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com