Важно: заявленная функциональность нам действительно нужна, поэтому не предлагайте альтернативы.
Мы пытаемся отображать и вводить текст в настраиваемом элементе управления WinForms, который включает текстовые и нетекстовые области - другими словами, современный холст.
Нам нужно иметь возможность отображать текст и курсор на настраиваемом элементе управления с различными уровнями масштабирования и с использованием других настраиваемых эффектов. Однако мы не хотим (или не имеем необходимых средств) для написания кода метода ввода с клавиатуры и мыши, кода линейных служб и т. Д. - решение должно поддерживать все языки, которые поддерживает стандартный TextBox.
Следовательно, подход, который мы рассматриваем, заключается в использовании скрытого текстового поля и маршрутизации к нему событий клавиатуры и мыши после подходящего перевода, а также использования его общедоступных методов доступа для определения расположения символов. Теоретически это позволило бы нам выделить выделенный текст, нарисовать курсор, выполнить правильные действия, когда пользователь нажимает клавишу (включая выбор и удаление текста с помощью клавиатуры).
Другими словами, текстовая область является прокси-сервером скрытого текстового поля. В результате мы расширяем функциональность текстового поля, преодолевая его ограничения, такие как отсутствие масштабирования и т. Д.
Мы ожидаем, что часть дисплея выполнима, но ввод с клавиатуры и мыши, вероятно, очень сложен.
Вопросы: Пробовали ли это раньше с успехом? Любой рабочий код был бы отличным.
Обновление: быстрый и грязный эксперимент, похоже, показывает, что TextBox не учитывает координаты мыши, отправленные в сообщениях мыши, но, похоже, напрямую считывает текущее положение мыши. Поэтому новый вопрос:
Можно ли преобразовать все события мыши TextBox в прямые действия TextBox таким образом, чтобы это работало на всех языках? Наше предположение, что метода проверки попадания GetCharIndexFromPosition вместе с методом выделения текста Select должно хватить. Это кажется разумным?