Ваш вопрос подсказал мне, как решить проблему с расширенным метафайлом.Мое приложение также выводило данные в режиме MM_ISOTROPIC
и с логическим (0,0) в центре представления.Выходное изображение было смещено и неправильно масштабировано.
Потратив немало времени на это, я наконец понял, что проблема может заключаться в двух версиях контекстов устройства, которые есть в CDC MFC.Первый DC m_hDC
предназначен для фактического вывода, а второй m_hAttribDC
предназначен для запроса метрик устройства, таких как DPI.
В итоге я закончил готовить контекст устройства следующим образом:
if (pDC->IsPrinting()){
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetViewportOrg(x0, y0);
pDC->SetWindowExt(wind_extent, wind_extent);
pDC->SetViewportExt(viewport_extent, -viewport_extent);
}
else{
::SetMapMode(pDC->m_hDC, MM_ISOTROPIC);
::SetViewportOrgEx(pDC->m_hDC, x0, y0, NULL);
::SetWindowExtEx(pDC->m_hDC, wind_extent, wind_extent, NULL);
::SetViewportExtEx(pDC->m_hDC, viewport_extent, -viewport_extent, NULL);
}
Предварительный просмотр и вывод метафайла после этого работали нормально.
Надеюсь, это поможет.