Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将窗口的一部分绘制到内存设备上下文中?_C++_C_Gdi - Fatal编程技术网

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

C++ 如何将窗口的一部分绘制到内存设备上下文中?,c++,c,gdi,C++,C,Gdi,我用简单的语句来保持它,呃,简单: 屏幕从0,0变为1000,1000(屏幕坐标) 窗口从100100到900900(屏幕坐标) 我有一个从0,0到200200(逻辑坐标)的内存设备上下文 我需要向窗口发送WM_打印消息。我可以通过WM_PRINT将设备上下文传递给窗口,但无法传递它应该将其窗口的哪一部分引入设备上下文 是否有某种方法可以改变设备上下文,从而导致窗口将其自身的特定部分绘制到设备上下文中(例如,其右下部分从700700到900900) (这都是在普通的旧GDI和C或C++中。任

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

  • 屏幕从0,0变为1000,1000(屏幕坐标)
  • 窗口从100100到900900(屏幕坐标)
  • 我有一个从0,0到200200(逻辑坐标)的内存设备上下文
我需要向窗口发送WM_打印消息。我可以通过WM_PRINT将设备上下文传递给窗口,但无法传递它应该将其窗口的哪一部分引入设备上下文

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

(这都是在普通的旧GDI和C或C++中。任何解决方案都必须是)< /P> 请注意: 这个问题是一个更大的解决方案的一部分,在这个解决方案中,设备上下文大小是固定的,速度是至关重要的,因此,我无法将窗口完整地绘制到单独的设备上下文中,并将生成的完整位图中所需的部分blit到我的设备上下文中。

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

SetViewportOrgEx(yourDC, -600, -600, NULL);
由于窗口的大小为
800x800
,因此将DC的坐标系偏移
-600x-600
将导致绘制窗口的
200x200
右下角区域,并剪裁其余区域。

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

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

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

谢谢Frédéric,这正是我需要的。:)谢谢弗里德里克,这正是我所需要的。:)