Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GMSAPR

.pdf
Скачиваний:
11
Добавлен:
16.03.2016
Размер:
9.01 Mб
Скачать

21

заменить все 32-разрядные типы данных их интегральными эквивалентами;

заменить все указатели на 64-разрядные;

заменить API-функции Win32 их интегральными эквивалентами, то есть функциями, которые могут выполняться и под Win32, и под

Win64.

Более подробную информацию можно найти в Интернете или других источниках.

2.1.3 Структура Windows-приложения

Работа Windows-программ основана на обработке сообщений, которые поступают от пользователя, операционной системы и других программ. Структура приложений обязательно включает в себя главную функцию WinMain, одинаково устроенную для всех приложений. С нее начинается выполнение всех Windows-программ. WinMain должна выполнить следующие основные действия:

Определить и зарегистрировать класс окна в Windows.

Создать и отобразить окно, определяемое данным классом.

Запустить цикл обработки сообщений.

При определении класса окна указывается специальная функция окна, которая должна реагировать на поступающие окну сообщения. Каждое приложение имеет свою очередь сообщений — ее создает Windows и помещает туда все сообщения, адресованные окну приложения. После создания и отображения окна запускается основной цикл обработки сообщений, в котором сообщения проходят предварительную обработку, и возвращаются обратно Windows. Затем Windows вызывает функцию окна программы с очередным сообщением в качестве аргумента. Анализируя сообщение, функция окна инициирует соответствующие операции. Сообщения, обработка которых не

22

предусмотрена функцией окна, передаются обратно Windows, которая выполняет обработку "по умолчанию". Ниже приведена минимальная программа для Windows:

//Минимальное приложение для Win32 #include <windows.h>

//Прототип функции окна

LRESULT CALLBACK

WinFunction (

 

 

HWND hwnd,

// Указатель на окно

 

 

UINT message,

// Идентификатор сообщения

 

WPARAM wparam,

// Параметры

 

 

LPARAM lparam);

// сообщения

 

 

// Имя класса окна

 

 

 

char szWindowName[]="MyClass";

 

 

// Функция WinMain

 

 

 

int WINAPI WinMain(

 

 

 

HINSTANCE hThisInst,

// Дескриптор экземпляра приложения

HINSTANCE hPrevInst,

// В Win32 всегда NULL

 

LPSTR lpszArgs,

// Указатель на строку с аргументами

int nWinWode)

 

// Способ визуализации окна при запуске

{

 

 

 

 

// Будет содержать указатель главного окна программы

HWND hwnd;

 

 

 

 

// Структура-буфер для хранения сообщений

 

MSG msg;

 

 

 

 

// Структура для определения класса окна

 

WNDCLASSEX wcl;

 

 

 

wcl.hInstance=hThisInst;

// Дескриптор приложения

wcl.lpszClassName = szWindowName;

// Имя класса окна

wcl.lpfnWndProc = WinFunction;

// Функция окна

wcl.style=0;

 

 

// Стиль по умолчанию

wcl.hIcon=LoadIcon(NULL, IDI_APPLICATION);

// Пиктограмма

wcl.hCursor=LoadCursor(NULL, IDC_ARROW);

// Курсор

23

wcl.lpszMenuName=NULL;

//

Без

меню

wcl.cbClsExtra=0;

//

Без

доп. информации

wcl.cbWndExtra=0;

// Без доп. информации

// Фон wcl.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

// Регистрация класса окна if(!RegisterClassEx(&wcl)) return 0;

// Создание окна

 

hwnd=CreateWindow(

 

szWindowName,

// Имя класса окна

"Минимальная программа

для Windows", // Заголовок

WS_OVERLAPPEDWINDOW,

// Стиль

CW_USEDEFAULT,

// Координаты x и y

CW_USEDEFAULT,

// верхнего левого угла

CW_USEDEFAULT,

// Ширина

CW_USEDEFAULT,

// Высота окна

HWND_DESKTOP,

// Родительское окно

NULL,

// Дескриптор меню

hThisInst,

// Дескриптор приложения

NULL);

// Без доп. информации

// Отображение окна

ShowWindow(hwnd, nWinWode); // Перерисовка окна

UpdateWindow(hwnd);

// Цикл обработки сообщений while(GetMessage(

&msg, // Буфер для сообщения

NULL, // Получать сообщения

//от всех окон приложения

0, 0)) // Диапазон получаемых сообщений — все

{

// Возвращает управление Windows DispatchMessage(&msg);

24

}

 

return msg.wParam;

// Значение, возвращаемое программой

};

 

// Функция окна вызывается Windows для обработки сообщений

LRESULT

CALLBACK WinFunction (

HWND

hwnd,

// Дескриптор окна

UINT

message,

// Идентификатор сообщения

WPARAM wparam,

// Параметры

LPARAM lparam)

 

{

 

 

switch(message)

{

case WM_DESTROY: // Завершение программы

PostQuitMessage(0);

break;

default: // Передает необработанные сообщения Windows return DefWindowProc(hwnd, message, wparam, lparam);

}

return 0;

};

Рассмотрим выполнение данной программы. Схематично процесс обработки сообщений показан на рис. 1.

Рис. 1. Схема обработки сообщений приложением

25

Функция окна, используемая в программе, называется WinFunction(). Она объявлена как функция обратного вызова, так как вызывается Windows для обработки сообщений. Программа начинает выполнение с вызова функции WinMain(). Первое, что выполняет функция WinMain(), — определяет класс окна путем заполнения полей структуры WNDCLASSEX. С помощью данной структуры программа указывает Windows функцию и стиль окна. Регистрация класса окна выполняется с помощью API-функции RegisterClassEx().

После этого создается окно с помощью API-функции CreateWindow(), параметры которой определяют внешний вид окна. В конце функции WinMain() расположен цикл сообщений. Он является обязательной частью всех приложений Windows. Пока приложение выполняется, оно непрерывно получает сообщения и извлекает их из очереди с помощью API-функции GetMessage(). Сообщения поступают через параметр функции типа структура MSG. Если очередь сообщений пуста, то вызов GetMessage() передает управление Windows. При завершении работы с программой функция GetMessage() возвращает ноль. После того, как сообщение прочитано, оно передается назад в Windows API-функцией DispatchMessage(). Windows хранит сообщение до тех пор, пока не передаст его программе в качестве параметра функции окна. Когда цикл сообщений завершается, функция WinMain() также завершает свое выполнение, возвращая Windows значение кода возврата.

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

фильтровать получаемые сообщения, задавая нужные параметры функции GetMessage();

транслировать виртуальные коды клавиш в клавиатурные сообщения с помощью функции TranslateMessage();

26

транслировать коды нажатия "горячих" клавиш в сообщения команд меню функцией TranslateAccelerator().

Сиспользованием этих функций цикл обработки сообщений может выглядеть следующим образом:

//Цикл обработки сообщений

while(GetMessage(&msg, NULL, 0, 0))

{

// Транслировать горячие клавиши if(!TranslateAccelerator(hwnd, hAccel, &msg))

{

// Транслировать виртуальные клавиши

TranslateMessage(&msg);

// Возвращает управление Windows DispatchMessage(&msg);

}

}

2.2 Библиотека классов Microsoft Foundation Class Library

Библиотека MFC — это базовый набор классов, написанных на языке C++ и предназначенных для упрощения и ускорения процесса программирования под Windows. Библиотека представляет собой многоуровневую иерархию классов (более 200), которые обеспечивают возможность создавать Windows-приложения на основе объектноориентированного подхода. Достоинством MFC является то, что использование ее классов позволяет избежать большей части рутинной работы и примерно в три раза сокращает объем текста программ. Инкапсулируя функции API, классы MFC значительно облегчают работу с ними. Интерфейс, обеспечиваемый библиотекой, практически не зависит от деталей, его реализующих. Поэтому программы, написанные на основе MFC, могут быть легко адаптированы к новым версиям Windows.

27 MFC — каркас, на основе которого можно создавать программы под Windows. Как уже отмечалось, у всех Windows-приложений фиксированная структура, определяемая функцией WinMain(). Структура приложений, построенных на основе объектов классов библиотеки MFC, является также

жестко заданной.

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

второй — от CFrameWnd. Эти два класса обязательны для любой программы.

Ядро MFC-приложения — глобальный объект theApp класса CApp — отвечает за создание всех остальных объектов и обработку очереди сообщений.

С помощью классов MFC можно написать множество вещей – от банального диалога до мощнейших Интернет-браузеров, обеспечить работу с различными периферийными устройствами, работать с файлами и многое другое. Даже если функциональности того или иного класса будет недостаточно, можно создавать собственные классы на основе классов MFC, определяя в них какую-то специфическую функциональность.

Однако, следует учитывать, что библиотека MFC (как и COM и ActiveX технологии) больше не развиваются. Будущее всего программирования Microsoft видит в технологии .NET.

2.3 Microsoft Visual C++ 2005 .NET

Среда разработки программ Microsoft Visual C++ предназначена для создания приложений — программ, снабженных всем необходимым для их работы: файлами ресурсов, библиотеками и т. д. В Visual C++ разрабатываются приложения на основе Microsoft Foundation Class Library (MFC) — библиотеки базовых классов объектов фирмы Microsoft, кроме того, можно разрабатывать программы по технологии .NET Framework.

28

Как и любая другая хорошая среда разработки, Microsoft Visual Studio Environment включает удобные средства управления проектами, редактор исходного текста, конструкторы пользовательского интерфейса, помощники, компиляторы, компоновщики, инструменты, утилиты, подробную документацию и отладчики. Она позволяет создавать приложения для 32- и 64разрядных Windows-платформ, как на обычных «классических» языках, так и на языках новой платформы .NET Framework.

Рис. 2.2. Среда разработки программ Visual Studio

Microsoft предлагает Visual Studio 2005 Environment в пяти изданиях: Express, Standard, Professional, Team System и для Microsoft Office, которые покрывают потребности всех категорий разработчиков - от начинающих одиночных программистов до профессиональных команд высшего класса.

Express представляет собой набор идентичных по составу продуктов, но с поддержкой только одного из языков - VB, VC#, VC++ или VJ#. Это упрощенные варианты средства для создания только Windows-приложений. Разница между изданиями Standard и Professional для многих целей разработки

29

представляется минимальной, серьезные различия видны, только если речь идет о создании достаточно сложных решений. Оба варианта позволяют разрабатывать Windows- и Web-приложения (в том числе и Win64) и ПО для мобильных устройств. В Professional Edition имеются дополнительно средства удаленной отладки, генератор отчетов Crystal Reports, SQL Server Developer Edition, SQL Server Integration и расширенные инструменты для развертывания ПО.

Visual Studio 2005 Team System - это интегрированный, расширяемый набор средств поддержки полного жизненного цикла командной разработки и приложений корпоративного уровня. Он также дает возможность создавать ПО для Intel Itanium. Продукт реализован в трех вариантах - для архитекторов, для разработчиков и для тестеров.

В состав VS 2005, как и ранее, входят компиляторы четырех языков - VB, VC#, VC++ и VJ#. Поддержка рефакторинга - одно из наиболее существенных новшеств VS IDE. Это позволяет автоматизировать процедуры переименования, перемещения и изменения типизированных элементов кода, исправления порядка описания параметров, имплементации программного интерфейса и ряд других операций. Все это выполняется с помощью нового инструмента моделирования Class Designer, который позволяет визуально представить структуру классов приложения или создать приложение путем визуального определения классов. Если щелкнуть правой кнопкой мыши диаграмму классов, то далее в меню можно выбрать вид операции рефакторинга. Далее выполняются необходимые изменения в диаграмме классов, которые также автоматически корректируют исходный код программы.

30

Рис. 2. Новый инструмент Visual Studio Class Designer

Правда, нужно отметить, что Class Designer использует для моделирования нотацию, отличную от широко распространенного UML, хотя и поддерживает включение в проект готовых UML-диаграмм классов.

Появление Visual Studio 2005 сопровождалось выпуском новой версии

.NET Framework 2.0, каркаса и среды исполнения .NET-приложений. Здесь также трудно говорить о каких-то революционных изменениях, но на самом деле новшества имеют место практически во всех компонентах системы. Механизм сериализации обеспечивает передачу объектов между уровнями приложения и представлен в двух вариантах: XML-сериализация и бинарная сериализация. Улучшено также взаимодействие с COM-объектами.

Надо отметить, что профессионализм и успех современного программиста состоят не только (часто даже не столько) в умении разрабатывать и реализовывать хитроумные алгоритмы, но и в способности использовать труд огромной армии коллег по всему миру. Неоценимую помощь при разработке программ может оказать библиотека знаний Microsoft Developer Network (MSDN) — это несколько гигабайт ценной информации. В MSDN можно найти не только справочную информацию по функциям API или классам MFC, .NET, но и массу статей, технических описаний, примеров

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