Шаг 61 - Win32 API и MFC

Описание

Для начала нам необходимо понять, что такое MFC и на каком уровне абстракции оно находится. В общем MFC - это каркасная библиотека, которая является оболочкой для Win32 API. Толщина этой оболочки разная. И естественно далеко не все функции Win32 API включены в MFC. Вот смотрите пример.

#include "afxwin.h"
void main()
{
MessageBeep(-1); // функция Win32 API
}

Функция MessageBeep проигрывает звук, связанный с конкретным событием. Как видите у этой функции отсутствует приставка Afx и вызывается напрямую с использованием API. Посмотрим второй пример. Здесь я просто объявляю класс точки.

#include "afxwin.h"
void main()
{
CPoint cp; // класс MFC
}

Этот класс точки является оболочкой. В WIN 32 API предусмотрена структура POINT. Этой структурой можно пользоваться, программируя на чистом C. Для этого MFC вообще не обязательна, а достаточно Windows.h. Вот где она описана.

/*++
Copyright (c) 1985-1996 Microsoft Corporation
Module Name:
windef.h
Abstract:
Basic Windows Type Definitions.
Revision History:
--*/

typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

Разрабатывая MFC разработчики создали оболочку для этой структуры в виде класса CPoint.

//AfxWin.H
class CPoint : public tagPOINT
{
public:
// Constructors
CPoint();
.......
};

Ну наверно технология создания MFC прояснена. Это оболочка над функциями WIN32 API позволяющая вам отвлечься от многих подробностей, облегчающая работу и создающая некоторую защиту при изменении API. Это очень важно, так как на сегодняшний день есть несколько разновидностей API. Например, для WIN 95 и WIN NT есть довольно большие различия в API. MFC скрывает некоторые различия. Вниманием только некоторые. Если ваша задача создавать приложения под WIN 95 и WIN NT одновременно Вам придется создать свою каркасную библиотек типа "универсальной MFC". Поступив точно также как и в примерах, но учтя все различия. А что такое вообще API? Это набор функций сосредоточенных в ядре Windows и дополнительных библиотеках. Ядро Windows это

USER    (16,32) .dll       функции ввода с клавиатуры мыши ввод через интерфейс и т.д.
KERNER (16,32) .dll функции операцимонной системы.
GDI (16,32) .dll графический интерфейс.

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

Конечно, ядро присутствует всегда, иначе Windows не будет работать, но например Ras32.dll для работы с удаленным доступом совсем не обязательна. Но функции по работе с ней есть в API, а значит, доступны в MFC. Что будет если эту DLL удалят, а ваша программа должна её использовать? Догадываетесь!

Шпаргалка

MFC оболочка WIN32 API.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 31.10.99 (обновлено 16.07.2001)