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

4 СОЗДАНИЕ ПРИЛОЖЕНИЙ В СРЕДЕ VISUAL C++

Среда Visual C++ позволяет разрабатывать приложения, реализованные как на основе объектно-ориентированного подхода, так и с использованием традиционного процедурного программирования. В этой главе будет рассмотрена архитектура приложений, разрабатываемых с использованием классов библиотеки MFC.

Разработка Windows-приложений

Структура Windows-приложения без использования MFC

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

Все меню, курсоры и пиктограммы, используемые в приложении, называются ресурсами и создаются с помощью редактора ресурсов (входящего в состав Visual C++).

Windows-приложение состоит из следующих основных компонентов:

  • программы на языке C/C++, содержащей функцию WinMain и функцию окна;

  • файла описания ресурсов (меню, диалоговые окна, пиктограммы, курсоры);

  • файла описания модуля (только для 16-разрядных приложений).

Функция WinMain

Приложения для 32-разрядной версии Windows должны иметь функцию WinMain. Эта функция регистрирует классы окна и определяет цикл обработки сообщений приложения.

Функция WinMain имеет следующее формальное описание:

int PASCAL WinMain(HINSTANT hlnst, HINSTANT hPrelnst, LPSTR lpszCmdLine,

int nCmdShow)

// hlnst - указывает дескриптор экземпляра приложения;

// hPrelnst - указывает дескриптор предыдущего экземпляра приложения или 0;

// lpszCmdLine - указатель на буфер, в котором содержатся параметры командной // строки;

// nCmdShow - способ отображения главного окна:

// SW_SHOWMINNOFCTIVE - отображать в виде пиктограммы;

// SW SHOWNORMAL - отображать в нормальном представлении.

{

операторы программы

}

Регистрация класса окна происходит в том случае, если в приложении объявлена переменная типа WNDCLASS. При инициализации структуры WNDCLASS следует указать функцию окна, отвечающую за обработку сообщений, направляемых этому окну. Функция окна, как правило, содержит оператор switch-case, анализирующий приходящие окну сообщения и вызывающий соответствующие методы обработки.

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

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

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

TranslateMessage (&lpMsg);

DispatchMessage ((&lpMsg);

}

Метод TranslateMessage используется при обработке сообщений от клавиатуры. Метод DispatchMessage направляет получаемые сообщения соответствующей функции окна.

Структура Windows-приложения, использующего библиотеку mfc

Применение библиотеки MFC не только значительно упрощает процесс создания приложения, но и позволяет уменьшить размер исходного кода (приблизительно в 2-3 раза). Для подключения этой библиотеки следует ввести: #include <afxwin.h>.

Точкой начала выполнения приложения можно считать метод InitInstance главного класса приложения.

Структура Windos-приложения, использующего библиотеку классов MFC, может иметь следующее формальное описание:

#include <afxwin.h>

class MyApp : public CWinApp

{public: virtual BOOL Initlnctance();};

BOOL MyApp::InitInctance()

{// точка начала выполнения программы

return TRUE;}

MyApp NewApp; // вызов конструктора приложения

Классы архитектуры приложения

Библиотека MFC условно подразделена на несколько категорий классов. Одной из таких категорий являются классы архитектуры приложения (Application Architecture Classes). Эти классы обеспечивают поддержку на уровне приложения.

AppWizard позволяет автоматически создавать различные типы приложений, использующие классы данной категории. Это могут быть приложения, реализующие диалоги, SDI-интерфейс (Single Document Interface) или MDI-интерфейс (Multiple Document Interface). Приложения с SDI и MDI интерфейсом относятся к приложениям с архитектурой документ/отображение (document/view). Приложение с архитектурой документ/отображение может содержать несколько классов документов, отображений и окон-рамок. Класс документа реализует работу с представлением данных, класс отображения реализует отображение данных, а класс окна-рамки предназначен для манипулирования областью экрана. С одним документом может быть соотнесено несколько различных классов отображения.

Все MFC-приложения имеют как минимум два объекта: объект приложение, производный от класса CWinApp, и объект главное окно, производный от класса CWnd или его потомков - классов CFrameWnd, CMDIFrameWnd и CDialog. В каждом приложении создается только один-единственный объект приложение.

Приложения с архитектурой документ/отображение содержат объекты как минимум трех следующих классов (или производных от них классов): CWinApp - объект приложение; CDocument - объект документ; CView - объект отображение документа.

Библиотека MFC позволяет создавать приложения, реализующие несколько потоков. Однако все приложения должны иметь как минимум один поток, используемый объектом приложения и называемый иногда основным потоком ("primary" thread).

Класс CWinThread инкапсулирует средства управления множеством потоков. Этот класс можно рассматривать как базовый класс для управления потоками. Дополнительно библиотека MFC предоставляет классы синхронизации объектов для обеспечения в C++ интерфейса синхронизации объектов, как в Win32.

Соседние файлы в папке VC++Баженова