Eshwar Reddy Ответов: 1

Выделите столбцы текста при щелчке левой кнопкой мыши alt+ mouse и перетаскивании в MFC, C++


Мне нужно выбрать столбцы текста, когда alt и левая клавиша мыши опущены и перетаскиваются.
Мне нужно реализовать операцию, которая существует в visual studio, когда мы выбираем столбцы текста с помощью alt, а левая клавиша мыши щелкает и перетаскивается.




Заранее спасибо

Что я уже пробовал:

Я не имею ни малейшего представления о том, как это осуществить.

Jochen Arndt

Это зависит от типа элемента управления, из которого вы хотите выбрать текст.

Большинство элементов управления поддерживают это уже тогда, когда клавиша Shift нажата во время перетаскивания.

Eshwar Reddy

Я хочу реализовать то же самое в Редакторе в своем проекте.
Элемент управления является производным от класса CWnd.

1 Ответов

Рейтинг:
0

Jochen Arndt

Итак, вы создали свой собственный CWnd контроля, основанного.

Затем вы должны реализовать его самостоятельно, используя общие обработчики для кнопки мыши вниз и вверх, а также перемещения мыши. Там проверьте состояние клавиши ALT с помощью GetKeyState(VK_MENU) и установите переменные-члены класса соответственно, чтобы указать, что выбор активен и где он начинается:

  • Кнопка вниз: если ALT down сохранить начальную позицию и установить состояние "выбор"
  • Переместить: если состояние "выбор", обновите экран, чтобы показать выбор
  • Кнопка вверх: если состояние "выбор", сохраните конечную позицию и установите состояние "имеет выбор"
  • Копировать: если состояние "имеет выбор", скопируйте его в буфер обмена
Способ отображения выделения зависит от вашей процедуры рисования. Обычно для этого требуется получить начальную и конечную позиции символов из позиций мыши.


Eshwar Reddy

Привет, спасибо за ответ.

Я могу ударить по событиям и сделать так, как вы сказали.Но как я могу выделить текст в виде прямоугольника?

Jochen Arndt

Вы должны получить положение символа (смещение буфера) из положения мыши. Это требует знания смещения страницы и строки при прокрутке, высоты строки и ширины символа (с фиксированной шириной шрифтов). С пропорциональными шрифтами это сложнее, но есть функции Windows API для таких вычислений. Ключевое слово - "текстовые метрики".

Eshwar Reddy

У нас есть CharfromPos (), чтобы получить индекс символа в классе CEdit или CRicheditctrl.
Мой контроль происходит от CWnd. Есть ли какая-либо аналогичная функция, такая как CharfromPos() в CWnd, или мне нужно реализовать ее с помощью моего собственного кода.


Заранее спасибо.

Jochen Arndt

Я не знаю этого контроля. Вы должны проверить документацию, если есть подобная функция. Если нет, то вам придется реализовать его самостоятельно, используя метрики используемого шрифта.