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

时间:2011-01-08 09:51:30

标签: 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到我的设备上下文中。

1 个答案:

答案 0 :(得分:1)

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

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

由于您的窗口大小为800x800,因此将{s}坐标系偏移-600x-600将导致窗口右下方200x200区域被绘制,其余区域被裁剪。< / p>