HDC — MapMode н еустанавливал — дефолтный MM_TEXT. Для него создаю объект Gdiplus::Graphics.
1) Когда создаю фонт
а) Для HDC — LOGFONT lf.lfHeight — про это поле пишут, что in logical units — Ок
б) Для Graphics — Gdiplus::Font — задаю Gdiplus::UnitWorld — Specifies world coordinates, a nonphysical unit. Почему-то размер шрифта получается больше, чем для простого GDI. Умножил на 0.9 — стало совпадать, у меня, но не факт, что так же будет на других мониторах. В чем проблема?
Есть еще такие юниты:
UnitWorld — Specifies world coordinates, a nonphysical unit.
UnitDisplay — Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
UnitPixel — Specifies that a unit is 1 pixel.
UnitPoint — Specifies that a unit is 1 point or 1/72 inch.
UnitInch — Specifies that a unit is 1 inch.
UnitDocument — Specifies that a unit is 1/300 inch.
UnitMillimeter — Specifies that a unit is 1 millimeter.
Но они вроде как не особо мне подходят
2) Вывожу текст функцией TextOut и Gdiplus::DrawString.
Почти всё хорошо, за исключением того, что Gdiplus::DrawString выводит текст правее, чем TextOut. У меня на мониторе — на 5 мм вправо.
Какого Хэ?
Здравствуйте, Marty, Вы писали:
Почему-то размер шрифта получается больше, чем для простого GDI. Умножил на 0.9 — стало совпадать, у меня, но не факт, что так же будет на других мониторах. В чем проблема?
Есть подозрение, что дело в знаке LOGFONT::lfHeight.
Положительные значения соответствуют размеру "ячейки" (cell), а отрицательные — символа.
Обычно размеры шрифтов пересчитываются из поинтов и DPI в логические юниты и с минусом ставятся в LOGFONT.
Задание размера ячейки — это какая-то экзотика.
Здравствуйте, qaz77, Вы писали:
Q>Почему-то размер шрифта получается больше, чем для простого GDI. Умножил на 0.9 — стало совпадать, у меня, но не факт, что так же будет на других мониторах. В чем проблема?
Q>Есть подозрение, что дело в знаке LOGFONT::lfHeight.
Здравствуйте, qaz77, Вы писали: M>>А нет мыслей, почему сдвиг? Q>У GDI+ объекта есть метод Font::GetLogFontW. Q>Может посмотреть в отладчике, что GDI структура LOGFONT заполнена эквивалентно.
Надо попробовать. Хотя, не очень понятно, как это может повлиять
Q>В целом мало информации. Q>Где код?
Кода слишком много
Q>Скриншот текста со смещением?
Здравствуйте, Marty, Вы писали: Q>>Скриншот текста со смещением?
Да, смещение не маленькое, на округления не спишешь...
Для GDI интерпретация x, y зависит от текущего выравнивания (SetTextAlign/GetTextAlign).
Я бы посмотрел вывод в точку (0, 0) для обоих случаев, чтобы исключить сдвиг и коэффициент масштабирования.
Еще заметил странность на скриншотах.
На GDI текст со сглаживанием, а линии фигур — нет.
На GDI+ все наоборот, текст без сглаживания, а линии симпатичные.
Здравствуйте, qaz77, Вы писали:
Q>На GDI текст со сглаживанием, а линии фигур — нет.
А это, кстати, наверное SystemParametersInfo с SPI_SETFONTSMOOTHING может отключить (в 10ке видимо по умолчанию включено, на более ранних виндах, помню, шрифты не так красиво рисовались), но не понятно, почему GDI+ без него