Шаг2. Выбираем «An empty project» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Шаг2. Выбираем «An empty project»

Поиск

Простейшая программа в MFC

 

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

 

Создаем новое приложение: File->New, далее:

Шаг1. Win32 Application

Шаг2. Выбираем «An empty project»

 

Создаем файлы следующего содержания:

 

 

Листинг 4.                                                                                                                                

 

// File “First.h”

/////////////////////////////////////////////////////////////////

#include <afxwin.h> // Ядро MFC и стандартные компоненты

class CMyMainFrame : public CFrameWnd

{

public:

    CMyMainFrame();

protected:

    //'afx_msg' означает, что функция -

    // часть системы распределения сообщений MFC

    afx_msg void OnPaint();

    DECLARE_MESSAGE_MAP()

};

class CFirstApp : public CWinApp

{

public: virtual BOOL InitInstance();

};

// File “First.cpp”

/////////////////////////////////////////////////////////////////

#include "First.h"

CMyMainFrame::CMyMainFrame()

{

CString s("MFC-приложение");

Create(NULL,s);

//Загружает требуемые ресурсы, определяет существующий 

// класс окна Win32 и создает объект окна Win32.

//NULL – вместо ссылки на строку с именем класса окна

//(означает предопределенный класс по умолчанию).

}

void CMyMainFrame::OnPaint()

{

CPaintDC dc(this);

dc.TextOut(0,0,"Hello, world!");

}

CFirstApp theApp;

BOOL CFirstApp::InitInstance()

{

m_pMainWnd = new CMyMainFrame();

m_pMainWnd->ShowWindow(m_nCmdShow);

//Отображает фрейм окна на экране

//m_nCmdShow соответствует параметру nCmdShow,

//поступившему от Windows в WinMain

m_pMainWnd->UpdateWindow();// обновляет клиентскую область

return TRUE;

}

BEGIN_MESSAGE_MAP(CMyMainFrame,CFrameWnd)

ON_WM_PAINT()

END_MESSAGE_MAP()

 

 

После компиляции простейшего MFC приложения, скорее всего, будут выданы ошибки. Исправляются они в опции проекта: Project->Properties->General->Use of MFC:”Use MFC in a Shared DLL”.

 

Основное назначение этого примера - в том, что он позволяет нам ознакомиться с принципами построения программ на базе библиотеки классов MFC. Каждое приложение, которое использует библиотеку MFC, может содержать только один объект «приложение», который конструируется в самом начале работы программы, еще до запуска функции WinMain.Последняя скрыта от нас в недрах MFC и не требует никакого внимания с нашей стороны. Для того, чтобы заставить наш объект класса производного от CWinApp, работать, функция WinMain найдет его через глобальную функцию MFC AfxGetApp().

 

Переопределенная нами функция CWinApp::InitInstance() отвечает за инициализацию каждого нового экземпляра приложения.Именно здесь, как правило, регистрируется и создается «главное окно» приложения (аналогично функциям RegisterMyWindow и InitInstance в рассмотренной выше программе “Hello, World!” под Windows (Листинг 3) и выполняются прочие подготовительные действия приложения.

 

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

· внешний вид приложения (включая его курсоры, пиктограммы, фон и т.д.)

· получение информации из системного реестра, командной строки и INI-файла

· работу приложения в то время, когда очередь его сообщений пуста

· взаимодействие документов и их представлений в приложениях SDI и MDI (далее обсудим подробнее)

 

Объект класса CMyMainFrame представляет основное окно программы. Когда конструктор вызывает функцию-член Create его базового класса CFrameWnd, Windows создает соответствующую оконную структуру, а каркас приложения связывает ее с C++-объектом. Для вывода окна на экран вызываются функции ShowWindow и UpdateWindow из базового класса, аналогичные функциям WinAPI, рассмотренным нами в первом приложении.

 

Функция OnPaint вызывается каркасом каждый раз по сообщению WM_PAINT. Подробнее механизм связывания сообщений и их функций-обработчиков будет обсуждаться далее.

 

Переменная типа CPaintDC, используемая в этой функции, представляет собой один из классов-оболочек MFC для контекстов графических устройств Win32. Данный класс особенно удобен тем, что его конструктор автоматически вызывает BeginPaint, а деструктор – соответственно EndPaint, причем если контекст устройства создан на стеке, то вызов EndPaint происходит автоматически.

 

В будущем в вашем проекте вы не будете непосредственно пользоваться классом CFrameWnd, предназначенным в первую очередь для SDI-приложений. Вместо этого мастер AppWizard автоматически создаст для вас каркас MDI-приложения на основе двух потомков CFrameWnd: главное окно является производным от CMDIFrameWnd, а дочерние фреймы документов являются объектами класса CMDIChildFrame.Подробнее об архитектуре многодокументного приложения мы поговорим в другой раз.

 

Включенный нами файл "afxwin.h" выполняет роль шлюза в библиотеку MFC. Через него подключаются все остальные файлы заголовков, включая "windows.h". Обычно, например, в случае формирования стандартного проекта MFC-программы с помощью AppWizard, все необходимые для программы библиотеки, в частности, "afxwin.h", объявляются в отдельном файле “stdafx.h”. Это делается для сокращения времени компиляции программы (большие по объему файлы заголовков, собранные здесь, не меняются между компиляциями, и поэтому при создании каркаса приложения AppWizard-ом файлу “stdafx.h” назначается режим предкомпиляции заголовков, чтобы обрабатывать его только раз).

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.007 с.)