【问题标题】:How to draw a part of a window into a memory device context?如何将窗口的一部分绘制到内存设备上下文中?
【发布时间】:2011-06-05 17:18:45
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c++ c gdi


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Frédéric,这正是我所需要的。 :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 2013-04-30
    • 2021-07-22
    • 1970-01-01
    • 2011-01-12
    • 2011-03-23
    • 2013-05-04
    • 2018-07-01
    相关资源
    最近更新 更多