Рейтинг:
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
Я не знаю этого контроля. Вы должны проверить документацию, если есть подобная функция. Если нет, то вам придется реализовать его самостоятельно, используя метрики используемого шрифта.