Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
257-288.doc
Скачиваний:
2
Добавлен:
11.11.2019
Размер:
356.35 Кб
Скачать

Подведение итогов

В этой главе рассказывалось, как можно отобразить строки текста в окне представления и использовать шрифты. Вы научились устанавливать и сохранять атрибуты шрифта, а также выводить текст заданным шрифтом. В случае необходимости прокрутки текста вы научились поддерживать средства прокрутки. Отметим главное.

  • При отображении текста в окне необходимо получить объект контекста устройства. Если текст отображается функцией OnDraw() класса представления, то используется объект контекста устройства, связанный с клиентской областью окна, адрес которого передан в эту функцию.

  • Если вы не хотите отображать текст, используя заданный по умолчанию шрифт System, то выберите альтернативный шрифт, описанный в классе CFont, вызвав функцию SelectObject() или функцию SelectStockObject() класса CDC для стандартного шрифта.

  • Для получения информации о размере или других атрибутах выбранного шрифта вызовите функцию GetTextMetrics() класса CDC.

  • Определите любые текстовые атрибуты, стандартные значения которых хотите изменить. Вызовите функцию CDC::SetTextColor() для установки цвета текста и CDC::SetTextCharacterExtra() для изменения межсимвольного интервала.

  • При отображении текста функцией OnDraw() класса представления необходимо вызвать функцию CDC::GetClipBox() для получения размеров недействительной области, что позволяет увеличить эффективность работы программы, так как текст отображается только в той области окна, которая нуждается в перерисовке.

  • Для завершения процедуры отображения текста используются функции CDC::TextOut() или CDC::DrawText(). Функция OnDraw() класса представления отображает текст, частично или полностью попадающий в недействительную область или окно представления.

  • Шрифт выбирается в стандартном диалоговом окне Font. Для этого создайте объект класса CFontDialog, а затем вызовите функцию CFontDialog::DoModal(). После возврата из функции можно получить полное описание выбранного шрифта, обращаясь к переменным и вызывая функцию класса CFontDialog.

  • Для инициализации объекта шрифта, являющегося экземпляром класса CFont, можно использовать информацию о шрифте из объекта класса CFontDialog. Затем объект шрифта можно выбрать в объекте контекста устройства и отобразить текст, используя этот шрифт.

Глава 9. Ввод текста

В этой главе рассматриваются вопросы:

  • чтение кодов управляющих клавиш;

  • чтение кодов символьных клавиш;

  • управление курсором при редактировании текста;

Чтение кодов управляющих клавиш и управление полосой прокрутки

Некоторые объекты пользовательского интерфейса обеспечивают ввод с клавиатуры, если обладают фокусом ввода (keyboard focus). К таким объектам относятся окна (главное, представления, диалоговое) и кнопки. Фокус ввода могут иметь только активные объекты. Активное диалоговое окно имеет выделенный заголовок. Активное главное окно располагается на самом верхнем уровне (top-level window). Если приложение поддерживает архитектуру документ-представление, и его главное окно является активным, то фокус ввода содержится в его окне представления. Если фокус ввода имеет кнопка, то она выделена. При каждом нажатии клавиши Windows посылает сообщение WM_KEYDOWN окну, в котором в данный момент находится фокус ввода. При каждом отпускании клавиши генерируется сообщение WM_KEYUP в этом же окне.

Ввод с клавиатуры — двухэтапный процесс. Прежде, чем сообщения WM_KEYDOWN и WM_KEYUP доходят до окна, они транслируются функцией ::TranslateMessage(). Если была нажата любая из функциональных клавиш, то активное окно получает только сообщения WM_KEYDOWN или WM_KEYUP независимо от трансляции сообщения. Комбинация клавиш Alt и любой другой называется системной клавишей, и при ее нажатии генерируется сообщение WM_SYSKEYDOWN, а при ее отпускании — WM_SYSKEYUP. Если введен символ ANSI, то функция трансляции сообщений ::TranslateMessage() проверяет состояние регистра клавиатуры и посылает сообщение WM_CHAR с соответствующим кодом символа верхнего или нижнего регистра. Таким образом, сообщения WM_KEYDOWN и WM_KEYUP порождают сообщения WM_CHAR и WM_DEADCHAR соответственно. Сообщения WM_SYSKEYDOWN и WM_SYSKEYUP порождают сообщения WM_SYSCHAR или WM_SYSDEADCHAR.

Для обработки сообщений WM_KEYDOWN и WM_KEYUP в классе окна существуют функции CWnd::OnKeyDown() и CWnd::OnKeyUp(). Обработчики сообщений WM_KEYDOWN и WM_KEYUP необходимы при визуализации сообщений управляющих клавиш.

Прототипы функций CWnd::OnKeyDown() и CWnd::OnKeyUp() приводятся ниже:

afx_msg void CWnd::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags); afx_msg void CWnd::OnKeyUp(UINT nChar,UINT nRepCnt, UINT nFlags);

Т а б л и ц а 9.1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]