|
http://tikitak.narod.ru ---- Главная страница сайта
Шаг 61 - Win API и MFC
Создаем проект
Оставляем наше консольное приложение Win32 c поддержкой MFC
Описание
Для начала нам необходимо понять, что такое MFC и на каком уровне абстракции оно находится. Вобщем MFC - это каркасная библиотека, которая является оболочкой для Win 32 API. Толщина этой оболочки разная. И естественно далеко не все функции Win 32 API включены в MFC.
Вот смотрите пример.
#include "afxwin.h"
void main()
{
MessageBeep(-1);
}
Функция MessageBeep проигрывает звук связанный с конкретным событием. Как видите у этой функции отсутсвует приставка Afx и вызывается напрямую с использованием API.
Расморим второй пример. Здесь я просто обьявляю класс точки.
#include "afxwin.h"
void main()
{
CPoint cp;
}
Этот класс точки является оболочкой. В 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 прояснена. Это оболочка над функциями WIN 32 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 удалят, а ваша программа должна её использовать ??? Догадываетесь :-) !!
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|