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

Программирование. Borland C++ 5.02 Функция Paint() и интерфейс GDI.


Ранее была рассмотрена структура простейшего OWL - приложения с главным окном. Можно было изменять размеры и цвет окна. Но приложение должно каким-то образом взаимодействовать с пользователем - выводить текст и графику на экран. Для этого необходимо обрабатывать сообщение WM_PAINT и использовать инструменты графического интерфейса GDI.

     Мы воспользуемся кодом, приведенном в предыдущем примере:

     Текст программы:

      файл: Start.cpp

#include <owl\applicat.h>

#include <owl\framewin.h>

// Класс приложения

class StartApp : public TApplication

{

     public:

          StartApp() : TApplication() {}

          void InitMainWindow();

};



// Класс главного окна

class StartWindow : public TFrameWindow

{

     public:

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

};

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

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

                       :TFrameWindow(parent, title)

{

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

     // расположение и размеры главного окна

     Attr.X = 100;

     Attr.Y = 150;

     Attr.W = 400;

     Attr.H = 300;

}

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

void StartApp::InitMainWindow()

{

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

     SetMainWindow(startWnd);

}

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

int OwlMain(int, char*[])

{

     return StartApp().Run();


}

     Вставляем в конструктор нашего окна функцию Paint(). Для этого:

     1. Необходимо объявить функцию Paint() в объявлении класса нашего окна.

     2. Необходимо определить функцию Paint() в определении класса нашего окна.

     Вот, что должно у Вас получиться:

      файл: Start.cpp

#include <owl\applicat.h>

#include <owl\framewin.h>

// Класс приложения

class StartApp : public TApplication

{

     public:

          StartApp() : TApplication() {}

          void InitMainWindow();

};

// Класс главного окна

class StartWindow : public TFrameWindow

{

     public:

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

          void Paint(TDC&, bool, TRect&);

};

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

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

                       :TFrameWindow(parent, title)

{

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

     // расположение и размеры главного окна

     Attr.X = 100;

     Attr.Y = 150;

     Attr.W = 400;

     Attr.H = 300;

}

void StartWindow::Paint(TDC& dc, bool, TRect&)

{

     dc.TextOut(20, 20, "SerVit Mas")

}

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

void StartApp::InitMainWindow()

{

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

     SetMainWindow(startWnd);



}

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

int OwlMain(int, char*[])

{

     return StartApp().Run();

}

     После компиляции и запуска этой программы, на экран будет выведена строка текста "SerVit Mas" в точку с координатами 10, 10 пикселей.

     Рассмотрим код этой программы подробнее.Изменения в программе коснулись только того, что в класс нашего главного окна добавлен метод (функция) Paint(). Эта функция замещает открытую виртуальную функцию класса TWindow Paint(). Как произошло это замещение? Очень просто. Класс нашего главного окна приложения StartWindow наследует классу библиотеки OWL TFrameWindow, имеющему в своем составе метод (функцию) Paint(). Поэтому функция Paint() нашего окна унаследовала все возможности функции Paint() класса библиотеки OWL TFrameWindow. Более того, все оконные классы библиотеки OWL (и в частности класс TFrameWindow) наследуют базовому классу библиотеки OWL - TWindow. В связи с этим функция Paint() класса TFrameWindow наследует функции Paint() своего базового класса TWindow. Получилась следующая картина наследования:

     функция Paint() класса StartWindow -> функция Paint() класса TFrameWindow -> функция Paint() класса TWindow.

     Отсюда следует, что функция нашего класса главного окна StartWindow::Paint() наследует функции TWindow::Paint() - класса TWindow.

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

     Методы (функции) и переменные базовых

классов можно посмотреть в заголовочных

файлах библиотеки OWL. Они расположены

в дирректории BC5/INCLUDE/OWL.

Например: классу TFrameWindow соответствует

заголовочный файл framewin.h, классу

TApplication - applicat.h и т.д.

     Функция Paint() очень важна, она вызывается программами OWL в ответ на приход в окно приложения сообщения WM_PAINT. В нашем примере обработка этого сообщения заключается в выводе в окно с помощью функции TextOut() строки текста.






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