Использование CreateCompatibleDC с режимами отображения, отличными от MM_TEXT - PullRequest
0 голосов
/ 10 августа 2009

У меня есть визуальное приложение C ++, которое использует производный класс CView для визуализации своего отображения, которое в основном состоит из трехмерных векторных данных и текста истинного типа. Используемый режим отображения - MM_ANISOTROPIC или MM_LOMETRIC. Я не могу использовать MM_TEXT, так как я использую один и тот же код для печати и печати данных, а также для преодоления проблем, связанных с пикселями на экране без квадратов.

Код для рисования в настоящее время рисуется непосредственно на экран с помощью метода CViews OnDraw и предоставленного объекта CDC. Я пытаюсь заменить это рисованием на растровое изображение и перетаскиванием растрового изображения на экран, используя комбинацию CreateCompatibleDC / CreateCompatibleBitmap, как описано в документации MS и других местах.

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

void CMyView::OnDraw(CDC *pDC)
{
    CDC MyDC = CreateCompatibleDC(pDC); // Create a new memory DC;
    int a = pDC->GetMapMode(),b = MyDC.GetMapMode();
'
'
'
}

a = 2
b = 1

Вызов SetMapMode на MyDC приводит к тому, что дисплей отображается полностью черным. Должен ли я переписать свой код в соответствии с MM_TEXT для рисования в растровое изображение, или есть другой способ преодоления этой проблемы.

1 Ответ

2 голосов
/ 10 августа 2009

Возможно, вам также необходимо вызвать SetWindowExt и SetViewportExt . Я определенно использовал MM_ISOTROPIC с DC для растровых изображений раньше, и он работал нормально (не имею кода для передачи, как это было с тех пор, как он был перенесен в GDI +)

...