Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Как видно из исходного текста, рисование текста выполняется без использования обработчика сообщения WMPAINT, и дескриптор контекста устройства мы получаем с помощью функции GetDC в обработчике нажатия левой кнопки мыши WM_LBUTTONDOWN. После вывода текста в окно приложения контекст устройства освобождается функцией ReleaseDC. В этом примере в качестве вспомогательной мы использовали функцию GetciientRect. Эта функция возвращает координаты клиентской области окна в структуре RECT, которую мы назовем rect. Структура имеет вид: struct {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
Поля структуры имеют следующее назначение:
• left определяет горизонтальную координату х левого верхнего угла клиентской области окна;
• top определяет вертикальную координату у левого верхнего угла клиентской области;
• right определяет координату х правого нижнего угла клиентской области окна;
• bottom определяет координату у правого нижнего угла клиентской области окна.

Координаты клиентской области окна вычисляются относительно левого верхнего угла (0, 0). Значения полей структуры rect используются функцией DrawText для вывода текста. Эта функция рисует отформатированный текст в определенной области окна и имеет следующий синтаксис:
int DrawText(HDC hdc, // дескриптор контекста
Если параметр nCount равен -1, то предполагается, что ipstring является указателем на строку с завершающим нулем, и функция DrawText вычисляет размер строки автоматически. Наконец, последний параметр uFormat устанавливает опции форматирования текста. В нашем случае текст располагается в одну строку по середине клиентской области окна.
Во всех последующих примерах и фрагментах кода будем сочетать использование высокоуровневых операторов invoke с обычными командами ассемблера. Это поможет избежать как громоздкости кода, так и его малой информативности.

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

Как вы уже поняли, отобразить текст в окне приложения нетрудно. Но если требуется выравнивание строк текста по горизонтали или вывод в строго определенные позиции окна, то программист сталкивается с некоторыми сложностями. Следует учитывать и то, что при изменении размеров окна относительное расположение текста не меняется. Это приводит к тому, что видимые части текста могут просто исчезать.

Многие программы нуждаются в позиционировании текста определенным образом. Функции DrawText, TextOut и другие имеют весьма ограниченные возможности по форматированию и позиционированию текста.
К счастью, в Windows есть целый ряд функций, при помощи которых можно добиться очень точного расположения текста в окне. Далее мы разработаем программу, при помощи которой можно отображать текст посередине клиентской области окна.
Вначале немного теории. Функция TextOut в качестве параметров, помимо всего прочего, принимает горизонтальное и вертикальное смещения начальной точки рисования относительно левого верхнего угла окна. Задать координаты можно прямо в операторе, например:
TextOut(hdc, 100, 50, IpString, lenString),
где lpstring — адрес строки, lenstring — ее размер.

В этом случае точка начала рисования текста будет отстоять на 100 единиц по горизонтали и на 50 по вертикали от начала отсчета. Но какие единицы измерения используются для рисования в Windows и для каких систем координат? Здесь необходимо дать некоторые пояснения.
Координаты графического интерфейса в документации Microsoft упоминаются как "логические координаты" (logical coordinates). Окно описывается в терминах логических координат. Ими могут быть пикселы, миллиметры, дюймы или любые другие единицы, какие мы захотим. В вызовах функций GDI мы задаем логические координаты.
В Windows имеются различные режимы отображения (mapping mode), которые определяют, как логические координаты, заданные в функциях GDI, преобразуются в реальные физические координаты дисплея. Режим отображения определяется в контексте устройства. Задаваемый по умолчанию режим отображения называется MM_TEXT (идентификатор, заданный в заголовочных файлах Windows).


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru