Как нарисовать часть окна в контексте устройства памяти?

Я использую простые операторы, чтобы все было просто:

  • Экран идет от 0, 0 до 1000, 1000 (экранные координаты).
  • Окно изменяется от 100, 100 до 900, 900 (экранные координаты).
  • У меня есть контекст устройства памяти, который идет от 0, 0 до 200, 200 (логические координаты).

Мне нужно отправить в окно сообщение WM_PRINT. Я могу передать контекст устройства в окно через WM_PRINT, но я не могу передать, какую часть своего окна оно должно отрисовывать в контекст устройства.

Есть ли способ изменить контекст устройства, который приведет к тому, что окно отрисует определенную часть самого себя в контексте устройства (скажем, его нижнюю правую часть от 700, 700 до 900, 900)?

(Это все под старым добрым GDI и на C или C++. Любое решение тоже должно быть.)

Обратите внимание: эта проблема является частью более крупного решения, в котором размер контекста устройства является фиксированным, а скорость имеет решающее значение, поэтому я не могу полностью отобразить окно в отдельном контексте устройства и скопировать нужную часть из результирующего полного растрового изображения в свой контекст устройства.


person Nell    schedule 08.01.2011    source источник


Ответы (1)


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

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

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

person Frédéric Hamidi    schedule 08.01.2011
comment
Спасибо, Фредерик, это как раз то, что мне было нужно. :) - person Nell; 08.01.2011