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

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


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





Глава 5
Программирование на ассемблере в Windows: от простого к сложному
В предыдущей главе мы разработали простую программу для Windows, выводящую в окно приложения строку символов. В этой главе мы последовательно рассмотрим основные аспекты эффективного программирования на ассемблере в операционной среде Windows. Эффективно программировать на ассемблере в Windows можно только в том случае, если научиться гармонично сочетать преимущества языка низкого уровня и возможности самой операционной системы. Можно с уверенностью утверждать, что качество программы во многом зависит от того, насколько хорошо программист владеет знаниями архитектуры Windows и умением использовать функции прикладного интерфейса программирования (WIN API). В этой главе, как и в остальных, сделан основной упор на практический аспект программирования. Мы будем рассматривать практически полезные программы и фрагменты кода.

Экзотические программы, такие как вывод текста вертикально или конструирование необычных геометрических фигур, мы рассматривать не будем. Для совершенствования техники программирования они могут представлять какой- то интерес, но для практического применения в разработках бесполезны. Поскольку большинство приложений работает с графическим интерфейсом, то необходимо вначале понять, как операционная система манипулирует графическими объектами, как осуществляется программирование графической подсистемы Windows.
GDI (Graphics Devise Interface — графический интерфейс устройства) — подсистема Windows, отвечающая за отображение текста и графики на экранах и принтерах. GDI является важнейшей компонентой операционной системы.

Графический интерфейс используется не только нашими приложениями, но и сама система Windows активно использует его для отображения элементов пользовательского интерфейса, таких как меню, полосы прокрутки, значки, курсоры мыши и другие графические объекты. Графика в 32-битной Windows реализуется в основном функциями, экспортируемыми из динамической библиотеки GDI32.DLL.
Для программиста графический интерфейс представляет собой набор функций и нескольких связанных с ними типов данных, макросов и структур. Но прежде чем рассмотреть некоторые из этих функций подробно, остановимся на общей структуре GDI.

5.1. Графический интерфейс Windows
Все функции графического интерфейса можно разбить на несколько групп. Это весьма условное деление, поскольку операции, выполняемые разными функциями, могут частично перекрываться. Для нас будут иметь важное значение следующие группы функций:
1. функции, создающие или уничтожающие контекст устройства. К ним ОТНОСЯТСЯ GetDC, ReleaseDC, BeginPaint И EndPaint. Все ЭТИ фуНКЦИИ позволяют получить дескриптор контекста устройства отображения. Последние две функции используются обычно внутри обработчика WMPAINT ДЛЯ рисования. ФуНКЦИИ GetDC И ReleaseDC ПОЗВОЛЯЮТ ПОЛу- чить дескриптор в обработчиках сообщений, отличных от WMPAINT;
2. функции, которые получают информацию о контексте устройства. К таким функциям относится, например, GetTextMetrics, возвращающая информацию о выбранном шрифте. Другая функция GetDeviceCaps позволяет получить информацию об указанном устройстве (дисплее или принтере). Еще одна функция, GetGraphicsMode, возвращает информацию о текущем графическом режиме. Кроме этих, в Windows имеется огромное количество других функций, несущих информацию о тех или иных системных установках;
3. функции, выполняющие вывод графических объектов в окно приложения. Например, для вывода текста используются функции DrawText и TextOut. Также имеется множество других функций, позволяющих рисовать линии и растровые изображения.
Рассмотрим более подробно понятие "контекста устройства". Контекст устройства (Device Context — DC) — это структура данных, которая поддерживается GDI. Контекст связан с конкретным устройством вывода информации, таким как принтер или дисплей. Почему мы должны уделить столь пристальное внимание контексту устройства? Дело в том, что эта структура используется при выполнении всех операций ввода-вывода информации на дисплей, принтер и, возможно, другие устройства.

Для дисплея, например, контекст устройства связан с окном приложения. Определенные значения в контексте устройства являются графическими Программирование на ассемблере в Windows: от простого к сложному 247 атрибутами, определяющими параметры функций рисования. Например, функция TextOut использует такие атрибуты, как цвет текста, цвет фона для текста и шрифт, используемый для вывода текста.
Контекст устройства содержит много атрибутов, определяющих работу функций графического интерфейса с устройством. Обычно для работы функций GDI требуются лишь начальные координаты или размеры. Например, если мы используем функцию TextOut, то необходимо в ее параметрах указать только дескриптор (описатель) контекста устройства, начальные координаты, сам выводимый текст и его длину. Дескриптор контекста передается обычно в переменной hdc, которая определяется в оконной процедуре так:
HDC hdc


 
 
 

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