c++ - 如何将窗口的一部分绘制到内存设备上下文中?

标签 c++ c gdi

我使用简单的语句来保持它,呃,简单:

  • 屏幕从 0, 0 到 1000, 1000(屏幕坐标)。
  • 窗口从 100, 100 到 900, 900(屏幕坐标)。
  • 我有一个从 0, 0 到 200, 200(逻辑坐标)的内存设备上下文。

我需要向窗口发送 WM_PRINT 消息。我可以通过 WM_PRINT 将设备上下文传递给窗口,但我无法传递窗口的哪一部分应该绘制到设备上下文中。

是否有某种方法可以改变设备上下文,使窗口将其自身的特定部分绘制到设备上下文中(例如,其右下部分从 700, 700 到 900, 900)?

(这一切都在普通的旧 GDI 和 C 或 C++ 中。任何解决方案都必须如此。)

请注意: 这个问题是一个更大的解决方案的一部分,其中设备上下文大小是固定的并且速度是至关重要的,所以我不能将整个窗口绘制到一个单独的设备上下文中并将我想要的部分从生成的完整位图中 blit 到我的设备上下文中。

最佳答案

您可以调用SetViewportOrgEx()指定将映射到窗口原点的设备上下文坐标:

SetViewportOrgEx(yourDC, -600, -600, NULL);

由于您的窗口大小是 800x800,将 DC 的坐标系偏移 -600x-600 将导致 200x200 的右下角区域绘制窗口,其余部分被剪裁。

关于c++ - 如何将窗口的一部分绘制到内存设备上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633317/

相关文章:

c - 小费计算——将一个数字换成小数表示

gdi - "Exclusive"DirectDraw 调色板实际上不是独占的

c++ - 在 C++ 中将 unsigned int 转换为 int 时避免整数溢出的有效方法是什么?

c - 将指针传递给不符合形式参数要求的函数

c - 当文本文件为空时如何停止读取字符串

c# - 如何获取 TextRenderer 使用的确切文本边距

winapi - 使用 GDI+ 的 Windows 初始屏幕

c++ - 垃圾收集器 : data structure of the object graph

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

C++ 从类方法返回对象数组