Управление растровым изображением. Альтернативные способы перерисовки динамического прямоугольника. Работа с растровыми изображениями

Страницы работы

Содержание работы

Управление растровым изображением

Традиционные приложения Win32, основанные на использовании функций API (Application Programming Interface), создаются с помощью набора инструментов, объединенных в разделе SDK (Software Development Kit) студии разработчика. В состав API входят не только функции (более 5000), но и множество структур, макросов, интерфейсов и более 800 сообщений. Доводами в пользу того, что существует необходимость знать и постоянно углублять свои познания в технологии разработки приложений с помощью SDK, могут быть следующие:

¨  Каркас MFC- или .NET-приложений содержит внутри себя структуру традиционного Windows-приложения;

¨  Многие методы MFC- или .NET-классов содержат (инкапсулируют) вызовы API-функций;

¨  Накоплен огромный банк готовых решений на основе SDK, которые достаточно просто внедряются в приложения. Не пользоваться этим багажом—означает обеднять себя.

Если поведение DOS-приложений полностью определено последовательностью кодов вашей программы, то поведение и последовательность действий в программах, управляемых событиями (event-driven application), в большей степени зависит от текущего состояния операционной системы, чем от порядка следования кодов программы. Большую часть времени Windows-приложение находится в состоянии ожидания событий, точнее сообщений о них. Поведение  таких приложений определяется потоком сообщений о событиях в системе.

Каждое событие сопровождается генерацией сообщения о нем. Все сообщения Windows имеют стандартные имена, многие из которых начинаются с префикса WM_ (Windows Message). Например, WM_PAINT именует сообщение о том, что необходимо перерисовать содержимое окна того приложения, которое получило это сообщение. Идентификатор сообщения WM_PAINT — это символьная константа, обозначающая число 15 (0x000F).

Другие примеры: при создании окна система посылает сообщение WM_CREATE (с кодом 1), по истечении кванта времени таймера (если он включен) система генерирует сообщение WM_TIMER (с кодом 0x0113), при нажатии леаой кнопки мыши вырабатывается сообщение WM_LBUTTONDOWN (с кодом 0x0201) и т. д.

Сообщения могут поступать от различных источников, но все они попадают в одну очередь системных сообщений. Некоторые из них система передаст в другую очередь—очередь сообщений приложения. Все это время приложение выполняет цикл ожидания сообщений. По приходе сообщения управление передается оконной процедуре данного приложения. Для того, чтобы произвести какие-то действия в ответ на сообщение, вы должны ввести в оконную процедуру некий код. Он располагается в соответствующей ветви оператора switch, который реализует ветвление в зависимости от кода поступившего сообщения.


Путь прохождения сообщений от клавиатуры

Тип структур MSG (сообщений) определен в одном из подключаемых файлов заголовков так:

typedef struct tagMSG // Ярлык типа. Структура самого типа определена { в блоке } ниже

{

HWND hwnd;     // Описатель окна, чья оконная процедура получает сообщение

UINT message;  // Код сообщения

WPARAM wParam; // Два параметра содержат дополнительную информацию, зависящую от сообщения

LPARAM lParam; // wParam и lParam несут важную информацию, сопутствующую сообщению

DWORD  time;   // Время посылки сообщения

POINT pt;       // Точка экрана, где был курсор в момент посылки сообщения

}

MSG;   // Тип структур, эквивалентный ярлыку

Универсальные параметры wParam и lParam используются различным образом в различных сообщениях. Например, в сообщении WM_MOUSEMOVE первый из них содержит идентификатор одновременно нажатой клавиши (Ctrl, Shift и т.д.), а второй (lParam) — упакованные экранные координаты (x, y) курсора мыши.

Приложение реагирует или не реагирует на сообщение, но в любом случае оно удаляет его из очереди сообщений. По отношению к приложению, сообщения появляются случайным образом и невозможно предсказать, какое сообщение появится в следующий момент.

Проект Win32 Application

Создайте новый проект типа Win32 Application. Для этого:

¨  В меню File4New выберите команду Project., в диалоге New Project, (окно Project Types) раскройте узел дерева под именем Visual C++ Projects, а в окне Templates выберите тип проекта Win 32 Project.

¨  В поле Name задайте имя проекта API, а в поле Location задайте файловый путь для новой папки с файлами проекта (D:\Users\ВашаПапка).

¨  Нажмите OK, и в появившемся окне мастера Win32 Application Wizard раскройте страницу Application Settings. Не устанавливайте флажок Empty Project и нажмите кнопку Finish.

¨  Удалите из проекта папку Resources, удалите также все файлы за исключением трех: stdafx.h, stdafx.cpp и API.cpp. Из контекстного меню проекта откройте страницу свойств (команда Properties) и откажитесь от кодировки Unicode, выбрав из списка строку Use Multi-Byte Character Set.

Похожие материалы

Информация о работе