2011-01-08 2 views
1

Я использую простые заявления, чтобы сохранить его, гм, просто:Как нарисовать часть окна в контексте устройства памяти?

  • экран идет от 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

Вы можете позвонить SetViewportOrgEx() указать контекст устройства координаты, которые будут отображаться на происхождение окна:

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

Поскольку размер вашего окна является 800x800, компенсируя систему координат DC путем -600x-600 приведет к 200x200 дна правой области окна, а остальные - обрезаны.

+0

Спасибо Фредерик, это то, что мне нужно. :) – Nell

Смежные вопросы