Нет, управляющий рендеринг в WinForms полностью основан на пикселях. - это способ, которым вы можете добиться субпиксельного позиционирования (без использования WPF), но это будет работать с вашей стороны, и я действительно не уверен, зачем вам это нужно в любом случае.
Суть этого подхода заключается в создании пользовательского элемента управления со скрытым экземпляром элемента управления, который вы пытаетесь разместить в стиле фанк (возможно, субпиксельным). Вы связываете все события пользовательского элемента управления так, чтобы они проходили к скрытому элементу управления, и после каждого события вы вызываете метод DrawToBitmap
скрытого элемента управления, чтобы получить снимок элемента управления. Затем вы используете Graphics.DrawImage
, чтобы скопировать снимок на поверхность пользовательского элемента управления. DrawImage не ограничивается пикселями, поэтому вы можете сместить чертеж менее чем на пиксель, чтобы добиться точного позиционирования, которое вы ищете.
Предупреждение : на самом деле, пожалуйста, не делайте этого, потому что для этого нет причин, когда вы можете просто использовать WPF. Это было бы много работы, поскольку "прохождение событий элемента управления" не так просто, как кажется. Также существует проблема с правильным отображением фокуса таким образом, поскольку невидимый элемент управления не может быть сфокусирован (я даже не собираюсь рассказывать вам, каково решение этой проблемы).
Обновление: Стоит пересмотреть это решение о WPF - оно идеально подходит для того, что вы делаете, и сделает вашу жизнь намного проще. Как правило, я не в восторге от WPF, потому что я думаю, что, несмотря на то, что он очень мощный, он, по сути, одолел для тех целей, для которых его чаще всего применяют (а именно для бизнес-приложений с скучной задницей). В вашем случае, однако, он обеспечивает гранулярность, которая вам действительно требуется в вашем приложении.
Однако, если вы застряли в WinForms, ваш лучший подход - написать собственные UserControl
версии элементов управления для редактирования текста, которые требуются вашему приложению. По своей сути, TextBox
- это просто квадрат, вокруг которого вы рисуете рамку и текст. Методы .Net Graphics
для этого (DrawRectangle
и DrawString
) могут иметь координаты рисования, указанные в плавающей точке.
Существует множество вопросов StackOverflow о пользовательских элементах управления и графике GDI +, нарисованных владельцем.