Пишу свой компонент с использованием GDI+. Компонент предназначен для ввода однострочного текста (типа TEdit), но выводится на экран средствами GDI+. Возникла проблема - при перемещение каретки ввода вправо - влево, каретка появляется не между символами. Для определения ширины символа (и соответственно расстояния на которое должна сдвинуться каретка) использую API функцию GetCharABCWidthsFloat. Функция срабатывает нормально, возвращая три необходимых величины. При этом если увеличить/уменьшить шрифт, изменить гарнитуру и т.п., то и функция начинает возвращать соответственно большие или меньшие данные. Но если перемещать каретку на величину возвращаемую этой функцией она, каретка, появляется где попало. Такое впечатление что результат функции не в пикселях, а в относительных единицах, хотя стоит режим MM_TEXT, что исходя из SDK соответствует - одна логическая единица = один пиксель.
Может кто с подобным уже сталкивался? Буду благодарен за любые ответы и советы!!!
Может это из-за округления? Размеры шрифтов, обычно, в пунктах измеряются. А пункт - меньше пикселя. То есть тебе функция выдает, что ширина символа - 10 пунктов, а ты передвигаешь каретку на 10 пикселей, хотя надо двигать на 13.