
- •Управление курсором при редактировании текста
- •Задание 3. Реализация процесса управления курсором при редактировании
- •Подведение итогов
- •Глава 10. Интерфейс графических устройств
- •Контексты устройств и объекты gdi
- •Объекты контекста устройства и выбор инструментов рисования
- •Идентификаторы стандартных инструментов рисования
- •Создание инструментов рисования
- •Некоторые стили пера
- •Значения, передаваемые в макрос rgb() для генерации стандартных чистых цветов vga
- •Режим отображения
- •Установка графических атрибутов
Подведение итогов
В этой главе описано, как читать символьные и управляющие клавиши, как отображать курсор и управлять им для отметки места вставки текста, а также рассмотрены следующие общие и технические приемы.
Создав обработчик сообщения WN_KEYDOWN, посылаемого при нажатии какой-либо клавиши (кроме системной), можно читать данные, вводимые с клавиатуры. Обработчик передает виртуальный код клавиши, идентифицирующий ее. Обработчик сообщения WM_KEYDOWN предназначен для обработки несимвольных клавиш (например, Home, End, , , , или функциональные клавиши).
Наиболее удобный способ чтения символьных клавиш (т. е. клавиш, которым соответствуют печатные символы) состоит в создании обработчика сообщения WM_CHAR, передающего фактический код ANSI для печатного символа.
В программе, сгенерированной мастером MFC Application Wizard, функции обработки сообщений WM_KEYDOWN, WM_CHAR, WM_SETFOCUS или WM_KILLFOCUS необходимо строить как элементы класса представления, так как эти сообщения передаются окну представления.
Чтобы создать и отобразить курсор, необходимо вызвать функции CWnd::CreateSolidCaret() и CWnd::ShowCaret() в обработчике сообщения WM_SETFOCUS, получающем управление при каждом помещении фокуса ввода в окно.
Чтобы удалить курсор при потере окном фокуса ввода, необходимо в обработчике сообщения WM_KILLFOCUS вызвать функцию ::DestroyCaret(). Причиной уничтожения курсора является то, что он может быть только в том окне, в котором находится фокус ввода.
Чтобы переместить курсор на нужное место в окне представления, следует вызвать функцию CWnd::SetCaretPos().
Перед рисованием в окне с помощью функции, отличной от OnDraw() или OnPaint(), необходимо вызвать функцию CWnd::HideCaret(), чтобы скрыть курсор, а после завершения рисования — вызвать функцию CWnd::ShowCaret() для восстановления курсора.
Глава 10. Интерфейс графических устройств
В этой главе рассматриваются вопросы:
создание объекта контекста устройства;
выбор средств рисования внутри объекта контекста устройства;
установка атрибутов рисования для объекта контекста устройства;
создание узоров средствами закрашивания пикселов.
Контексты устройств и объекты gdi
В ответ на действия пользователя и другие события, возникающие в системе, Windows-приложения рисуют и перерисовывают содержимое своих окон. Приложения осуществляют вывод графических изображений на аппаратные устройства, используя набор независимых от этих устройств функций. Данные функции составляют библиотеку GDI (Graphic Device Interface — интерфейс графического устройства). Использование GDI освобождает Windows-приложение от необходимости решать проблемы несовместимости устройств и определять их драйверы для различных видеокарт, принтеров и другого оборудования. Напомним, что драйверы устройств представляют собой программы, управляющие их работой. Взаимосвязь между графическими приложениями, GDI, программными драйверами устройств и аппаратными средствами изображена на рис. 10.1.
Рис. 10.1. Взаимосвязь между приложениями, GDI, драйверами и устройствами вывода