Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования для информатиков и инженеров. Часть 2 Прикладное программирование в Windows.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
603.45 Кб
Скачать

Глава 8. Виртуальное окно: работа с текстом

 

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

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

В начале главы вводится понятие системы координат в окне. Затем описываются основные функции API, использующиеся для работы с текстом и с экраном, которые позволяют управлять выводом текста в рабочей области окна.

 

8.1. Оконные координаты, цвета, отображение строк

 

Оконные координаты. Как известно, TextOut() является стандартной функцией вывода текста в Win­dows. Она выводит текст в заданных координатах, которые всегда указываются относительно начала рабочей области окна. Таким образом, координаты строки, выводимой при помощи TextOut(), не зависят от положения самого окна на экране. По умолчанию координаты начала (верхнего левого угла) рабочей области равны нулю. Координата по оси X увеличивается при движении вправо, а координата по оси Y – при движении вниз.

До сих пор при задании координат в функции TextOut() и для позиционирования элементов в диалоге нас не интересовали единицы измерения координат. Сейчас следует подробнее рассмотреть этот вопрос. Прежде всего отметим, что координаты, задаваемые в TextOut(), являются логическими координатами. То есть единицы измерения координат для TextOut() (и любых других функций, отображающих что-либо на экране, включая функции вывода фафики, которые описаны в следую­щей главе) являются логическими единицами. В процессе вывода изображения на экран Windows преобразует логические единицы в пикселы. До сих пор нам не нужно было беспокоиться по этому поводу, поскольку по умолчанию логические единицы как раз и являются пикселами. Однако следует иметь в виду, что в Windows можно использовать различные режимы отображения (mappind modes), в которых подобное умолчание не работает.

Установка цветов текста и фона. При использовании функции TextOut() текст отображается на экране черным цветом на текущем фоне окна. Существует также возможность явного задания цвета текста и фона для него с помощью функций API SetTextColor() и SetBkColor():

 

COLORREF SetTextColor(HOC hdc, COLORREF color);

COLORREF SetBkColor  (HDC hdc, COLORREF color);

 

Функция SetTextColor устанавливает текущий цвет текста для устройства, ассоциированного с контекстом hdc. Цвет задается параметром color (при этом устройство может выбирать реальный цвет, ближайший к задаваемому, который оно в состоянии отобразить). Функция SetBkColor() устанавливает цвет фона текста (или ближайший к нему возможный для устройства), задаваемый параметром color. Обе функции возвращают предыдущую установку соответствующего цвета, а при возник­новении ошибки – значение CLR_INVALID.

Цвет задается 32-битовым целым типа COLORREF. Windows позволяет задать цвет тремя различными способами. Первый, и наиболее общий, способ заключается в задании RGB-значения (Red, Green, Blue). RGB-значение комбинирует относительные интенсивности трех различных цветов, в результате чего получается реальный цвет. Второй способ определения цвета предполагает задание индекса цвета в логической палитре, а третий заключается в определении RGB-значения относитель­но текущей логической палитры. В этой главе используется только первый способ задания цвета.

Длинное целое, хранящее RGB-значение и передаваемое в качестве параметра в функции SetTextColor() и SetBkColor(), кодируется следующим образом (табл. 8.1.):

 

Таблица 8.1