Как интерпретировать CD C :: DrawText, возвращающий отрицательное значение? - PullRequest
2 голосов
/ 26 марта 2020

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

При сравнении возврата значения от CDC::DrawText для определенных элементов, я замечаю, что при рисовании в память возвращаемое значение является положительным, но затем при рисовании на принтер возвращаемое значение является отрицательным.

Документация CD C гласит: DrawText return « Высота текста, если функция выполнена успешно. »
Что означает отрицательное значение?

1 Ответ

3 голосов
/ 26 марта 2020

Это связано с тем, что два ваших CD C (память и принтер) были помещены в разные режимы отображения .

Например, когда CD * Контекст основного устройства 1022 * находится в режиме MM_TEXT, тогда положительное значение y равно внизу , тогда как в (большинстве) других режимах положительное значение 'y' увеличивается. Быстрый тест на моей собственной системе (хотя и с использованием экранного CD C) показал, что CDC::DrawText() возвращает положительное значение, когда D C находится в режиме MM_TEXT, но отрицательное значение для (например) MM_ISOTROPIC или MM_HIMETRIC.

Независимо от того, изменили ли вы явно режим отображения для любого из ваших CDC, я не знаю! Но, даже если вы этого не сделали, инфраструктура MF C, вероятно, "что-то сделала" с контекстом устройства принтера - либо до того, как вы его получили, либо (что более вероятно) в функции OnPreparePrinting.

...