Как нарисовать часть окна в контексте устройства памяти? - PullRequest
1 голос
/ 08 января 2011

Я использую простые выражения, чтобы сохранить его, э-э, простой:

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

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

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

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

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

1 Ответ

1 голос
/ 08 января 2011

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

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

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

...