Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

Создаем код

В нашем файле запишем код.

//

// Step1.cpp

// Сайт Первые шаги (http://www.firststeps.ru/)

// Каев Артем (1999-2001)

// создано 1999 г.

// обновление 24.06.2001

#include "afxwin.h" // MFC Основные и стандартные компоненты

class CMainWnd : public CFrameWnd

{

public:

CMainWnd(); // Конструктор по умолчанию

};

CMainWnd::CMainWnd()

{

Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,

NULL,NULL); // Создать окно программы

}

class CMyApp : public CWinApp

{

public:

CMyApp(); //конструктор по умолчанию

virtual BOOL InitInstance();//стандартная инициализация

};

CMyApp::CMyApp() // конструктор главного класса приложения

{}

BOOL CMyApp::InitInstance() // стандартная инициализация

{

m_pMainWnd=new CMainWnd(); // создать класс окна

ASSERT(m_pMainWnd); // проверить его правильность

m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно

m_pMainWnd->UpdateWindow(); // Обновить окно

return TRUE; // Вернуть что все нормально

};

CMyApp theApp; // запуск приложения

Теперь попробуем во всем этом разобраться:

Первая строка включает необходимый файл заголовка с описанием классов, функций и переменных, он ссылается ещё на многие другие классы, а они на другие и так до windows.h. Вот почему windows.h в программе не понадобился.

В каждой программе на С++ есть главная функция программы, в Dos это main(), в Windows - WinMain(). Эта функция обеспечивает запуск программы. Она проверяет операционную среду, выполняет некоторые настройки и, если все нормально, непосредственно передает управление вашему коду. Но в созданной программе её нет. Дело в том, что в MFC есть класс CWinApp, который и включает главную функцию программы. Естественно, что в приложении она может быть только одна.

Мы с вами создали CMyApp, как производный от CWinApp и унаследовали все его свойства, методы и т.д. В своем классе мы объявили конструктор по умолчанию (без параметров). Он необходим, иначе вы не скомпилируете программу. Здесь все логично мы в коде объявляем статический класс производный от нашего CMyApp в строке CMyApp theApp;. Как видите он тоже без параметров.

CWinApp имеет виртуальный метод InitInstance(). Виртуальный он потому, что это только заглушка. Мы с вами написали свой метод в виде функции. Этот метод должен возвращать ненулевое значение, если инициализация прошла нормально, а иначе 0. Он предназначен, чтобы вы могли описать класс окна программы и отобразить окно на экране.

Дальше мы должны знать, что в CWinApp есть указатель на класс окна - m_pMainWnd. Этот указатель общедоступный и вы могли догадаться, так как он нигде не объявлен. Ситуация с ним такая - Если по окончанию InitInstance() он будет равен нулю, то приложение завершится. И естественно, когда приложение завершается он обнуляется. Строкой m_pMainWnd=new CMainWnd(); мы присваиваем этому указателю адрес класса CMainWnd, который порожден от CFrameWnd. Последний из них отвечает за работу окна программы в стиле одного документа (SDI - single document interface). Он создает окно, управляет сообщениями и т.д. В конструкторе этого класса мы вызвали функцию создания окна, в которой указали кучу параметров.

Первый параметр указывает на класс Windows, он нам не нужен, пока не нужен и поэтому NULL, дальше указали имя окна программы, WS_OVERLAPPEDWINDOW указывает, что окно имеет заголовок и рамку, rectDefault говорит о том, что размер окна присвоит Windows, и еще некоторые параметры, ими всеми мы займемся позже. Далее следует ASSERT(m_pMainWnd);. Очень хорошая и простая функция. Если создание объекта произойдет, то m_pMainWnd будет отличаться от нуля и всё будет нормально, а иначе вы получите сообщение о том, что в таком файле на такой-то строке ошибка. Вообще это намного лучше, чем смотреть дизассемблированный код или оказаться в исходном коде библиотеки MFC, если не повесим Windows конечно.

Так как m_pMaiWnd это сейчас тоже что и CMainWnd, то мы используем это переменную, чтобы вывести на экран окно:

m_pMainWnd->ShowWindow(SW_SHOW);

И показать окно.

m_pMainWnd->UpdateWindow();

Вот и все ! При запуске приложения вот такое окно мы получим.