Программирование на С++ с помощью компилятора Borland C++ 5.02 и библиотеки OWL 5.00

Разберем текст программы


Разберем текст программы.

     Как мы уже говорили выше (смотри Урок №1), для того чтобы создать полноценное Windows-приложение, необходимо выполнить несколько важнейших и обязательных процедур:

     1. Создать сам объект приложения.

     2. Зарегистрировать в системе Windows класс главного окна. Если помимо главного окна будут выводиться на экран внутренние, порожденные окна, то их классы тоже необходимо зарегистрировать. Windows выводит на экран и обслуживает только зарегистрированные окна.

     3. Создать главное окно и показать его на экране. Порожденные окна тоже необходимо создать, но это можно сделать позже и не только в главной функции.

     4. Организовать цикл обработки сообщений, поступающих в приложение. Вся дальнейшая работа приложения будет состоять в бесконечном выполнении этого цикла и в обработке поступающих в приложение сообщений до тех пор, пока пользователь не подаст команду его завершения с помощью системного меню или вводом <Alt> + <F4>. Это приводит к завершению работы главной функции и удалению приложения из списка действующих задач Windows.

     Приложения под Windows на любом языке можно создавать несколькими путями:

     1. Используя вызовы стандартных функций Windows API (Application Programming Interface - Интерфейс Прикладного Программирования);

     2. Используя одну из прикладных библиотек (OWL, MFC);

     С Borland C++ 5.02 поставляется библиотека OWL 5.00. Также есть возможность использовать библиотеку MFC (Microsoft Foundation Classes - Базовые Классы Microsoft).

     Мы будем рассматривать библиотеку OWL.

     Библиотека OWL имеет все возможности для создания любых Windows - приложений. В ее состав входит огромное число классов:

     TApplication - для создания объекта-приложения;




     TFrameWindow - для создания главного окна;

     TWindow - базовый класс окон, также применяется и для создания дочерних окон;

     TDecoratedFrame - для создания декорированных окон;

     TDialog - для создания диалоговых окон;

     TMenu - для создания объекта меню;

     TBitmap - для рисунков;

     TPen - для кистей для рисования;     и много-много других классов.

     Мы с Вами хотим создать простое окно, пока не умеющее взаимодействовать с пользователем.Для этого мы должны создать:

     1. Объект-приложение (для этого в OWL создан класс TApplication);

     2. Главное окно (для этого OWL имеет класс TFrameWindow);

     Отсюда следует, что наше с Вами приложение будет иметь в своем составе два класса: производный от TApplication и производный от TFrameWindow.

     При программировании на языке С++ необходимо придерживаться правила:

     "Используя класс программист обязан сначала объявить, а после определить используемый им класс".

       Объявим используемые нами классы:

class StartApp : public TApplication

{

     public:

          StartApp() : TApplication() {}

          void InitMainWindow();

};

       Давайте рассмотрим, какой код здесь написан?

     В первой строке:   class StartApp : public TApplication - Мы хотим, чтобы наш с Вами класс с именем StartApp умел делать все, что умеет делать класс OWL TApplication. (При программировании на языке С++ это звучит так: класс StartApp наследует классу TApplication).



     Во второй строке:   { - открывающая фигурная скобка обозначает начало класса.

     В третьей строке:   public: - Обозначает то, что методы (функции) и члены (данные) нашего класса будут общедоступны.

     В четвертой строке:   StartApp() : TApplication() {} - описан конструктор по умолчанию (о нем мы поговорим позже).

     В пятой строке:   void InitMainWindow(); - наш класс будет иметь собственную функцию InitMainWindow(), а не ту, которая содержится в классе TApplication.

     В шестой строке:   }; - закрывающая фигурная скобка обозначает окончание класса, причем   ; (точка с запятой) - указывает на то, что это объявление класса.

     Так как наше приложение будет использовать класс OWL TApplication, мы обязаны включить в код нашей программы включаемый файл этого класса из этой библиотеки.

     Выполнено это в самой первой строке кода нашей программы:

     #include <owl\applicat.h>

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

     1. Включаем в код нашей программы включаемый файл класса TFrameWindow из библиотеки OWL. - это сделано во второй строке кода нашей программы:

     #include <owl\framewin.h>

     2. Объявляем наш класс StartWindow от TFrameWindow из библиотеки OWL:

class StartWindow : public TFrameWindow

{

     public:

          StartWindow(TWindow *parent, char far *title);

};

     Этот код практически повторяет код объявления класса TApplication за исключением того, что выбран конструктор не по умолчанию и мы не будем использовать методы (функции) и члены (данные) в этом классе.



      Следующим действием которое нам предстоит сделать, будет определение конструкторов (кроме конструкторов по умолчанию) и методов (функций) классов нашего приложения.

       Определим используемые нами классы и методы (функции):

// Конструктор главного окна

StartWindow::StartWindow(TWindow *parent, char far *title)

                       :TFrameWindow(parent, title)

{

     // код конструктора главного окна

}

       Первая и вторая строки:

     Из класса StartWindow ( StartWindow:: ), конструктор StartWindow ( StartWindow(TWindow *parent, char far *title): ), наследующий классу TFrameWindow(parent, title), передаст своему базовому классу два параметра (TWindow *parent, char far *title). Эти параметры - два объекта класса TWindow и символьная строка char far. Откуда будут взяты эти данные, мы увидим позднее.

     Проще говоря, для того чтобы Windows смогла правильно сконструировать программируемое нами окно, необходимо передать в базовый оконный класс TFrameWindow библиотеки OWL, два параметра: parent (номер родительского окна) и title (строку символов, которая будет напечатана в заголовке окна).

       Третья строка:

     { - открытие тела конструктора.

       Четвертая строка:

     // код конструктора главного окна.    -    Код конструктора указывает системе какое окно мы хотим получить (цвет, размеры, положение окна, наличие системных кнопок, рамки окна, меню, полос прокрутки и т.д.). В этой программе мы не набираем код конструктора. Поэтому Windows сама побеспокоится как будет выглядеть наше окно (она подставит значения по умолчанию).



       Пятая строка:

     } - закрытие тела конструктора.

     Это очень важно!!!

     Обратите внимание, что определение

     отличается от объявления отсутствием

     знака   ;   после закрытия тела.

      После этого нам необходимо определнть метод (функцию) класса StartApp нашего приложения.

     Выполнено это следующим образом:

// Функция InitMainWindow класса TStartApp

void StartApp::InitMainWindow()

{

     StartWindow *startWnd = new StartWindow(0, "Первое окно");

     SetMainWindow(startWnd);

}

       Рассмотрим этот код подробнее:

       Первая строка:

void StartApp::InitMainWindow()

     Функция InitMainWindow(), принадлежащая классу StartApp, не принимающая (внутри круглых скобок не вписаны данные) никаких значений и не выдающая никаких значений (void).

       Вторая строка:

     { - открытие тела функции.

       Третья строка:

     StartWindow *startWnd = new StartWindow(0, "Первое окно");

      Объявляется указатель (*startWnd) с именем startWnd на объект класса StartWindow и создается динамический объект (= new StartWindow(0, "Первое окно")) класса StartWindow с параметрами, которые будут переданы в класс TFrame Window библиотеки OWL (0, "Первое окно"). Первый параметр 0 (нуль) - т.к. окно единственное и не имеет родителя. Второй - символьная строка, значение которой мы хотим увидеть в строке заголовка нашего окна.

       Четвертая строка:



     SetMainWindow(startWnd);

     Окно, на которое указывает указатель startWnd, назначается главным окном приложения.

       Пятая строка:

     } - закрытие тела конструктора.

     Последнее, что нам необходимо сделать - это определнть метод (функцию) OwlMain, обязательную функцию для всех Windows-приложений, создающихся с помощью библиотеки OWL.

     Вот код этой функции:

// Функция OwlMain()

int OwlMain(int, char*[])

{

     return StartApp().Run();

}

     Код этой функции практически никогда не изменяется. Она запускает Windows-приложение, используя функцию Run() класса TApplication (через унаследованный класс StartApp).




Содержание раздела