Программирование >>  Программирование на языке c++ 

1 ... 116 117 118 [ 119 ] 120 121 122 ... 159


module - указатель на объект класса TModule.

Вместо конструктора базового класса можно вызвать функцию TWindow::Init в теле конструктора класса DrawButton. В этом случае конструктор будет выглядеть примерно так:

DrawButton :: DrawButton(TWindow* parent) { init(parent,0,O);

new TButton(this,-1, my button ,100,50,80,30); } Функция Init объявлена в следующем виде: void lnit(TWindow* parent,

const char far* title, TModule* module); Она имеет те же параметры, что и рассмотренный выше конструктор класса TWindow.

Конструктор класса TButton описывается следующим образом:

TButton(TWindow *parent, int Id,

const char far *text, int X, int Y, int W, int H,

BOOL isDefault = FALSE, TModule* module = 0);

где parent - указатель на окно родитель. В качестве этого указателя здесь можно использовать указатель this (поскольку объект класса TButton объявляется в теле конструктора объекта родителя);

Id - это уникальный идентификатор объекта класса TButton (уникальная константа для указанного объекта). При выборе кнопки (например, с помощью манипулятора мышь ) значение Id будет послано в виде сообщения объекту родителю. Если Id = -1, объект не посылает сообщения;

text - указатель на строку, которая задает имя кнопки (см. рис. 9.11);



X,Y - горизонтальная и вертикальная координаты кнопки, W, Н - это ширина и высота кнопки (см. рис. 9.11);

module - указатель на объект класса TModule.

Рассмотренная выше программа в действительности является бесполезной. После ее выполнения на экране появится окно, показанное на рис. 9.11. Если нажать кнопку, используя мышь , то никакие действия не будут выполнены. В практических программах полезно реагировать на подобные действия (на нажатие кнопки). Для этого необходимо: уметь посылать сообщения после нажатия кнопки; уметь реагировать на различные сообщения. Эти вопросы будут рассмотрены в §. 9.2.

9.1.5. Завершение прикладной программы

Покажем теперь, какие действия выполняются, если нужно закрыть окно в прикладной программе. Класс TApplication и все классы, поддерживающие работу с окнами, имеют (или наследуют) компонент-функцию с именем CanClose. При закрытии окна (например, при нажатии клавиш Alt-F4), соответствующая функция CanClose будет вызвана автоматически. Эту функцию можно переопределить, чтобы выполнить некоторые действия перед закрытием. Рассмотрим пример:

#include <owl\applicat.h> #include <owl\framewin.h> class my app : public TApplication {

public:

f y app() : TApplicationO {} protected:

virtual void InitMainWindow(void);

class my win : public TWindow {

public:

my win(TWindow* parent = 0) : TWindow(parent,0,0) {} protected:

virtual BOOL CanClose();



Выбор пунк-

Выбор пункта меню Exit

Нажатие клавиш ALT+F4


Главное окно

Окно сообщении/

Вы хотите заверни ль Ван> пр01рамм\


Вы можс1е нажать КНОПКУ YES или N0

Вызов функции CanClose

I reiuni,McssageBo\( Do you wani lo с1о.че . Г,М B YESNQ)r=tDYES;

Если Вы нажали кнопку YES , г*>функция MessaiicBox но (Пращает значение IDYES

В этом случае CanClose кознращает аначеиие TRUE

Если Вы нажали кнопку NO , 10 нознратастся значение IDNO

В этом случае CanClose нозиращает зиачсиие FALSE

Рис. 9.13. Основные действия, выполняемые при завершении программы

BOOL my win :: CanClose()

{ return MessageBoxCDo you want to close? , ? ,

MB YESNO) == IDYES; } void my app :: InitMainWindowQ { SetMainWindow(new TFrameWindow{0, New ,

new my win)); }

int OwlMain{int, char**)

{ return my app().Run(); }

Ha рис. 9.13 показаны основные действия программы. Если Вы выберете кнопку YES, то Вы подтвердите Ваше намерение завершить программу. В результате программа будет завершена (если функция CanClose возвращает значение TRUE, то оно разрешает завершение программы). Если Вы выберете кнопку NO, то программа не будет завершена (если функция CanClose возвращает значение FALSE, то оно отменяет завершение программы).

Функция CanClose описывается в следующем виде:

virtual BOOL CanClose(void);

Она возвращает значение TRUE, если связанный с ней интерфейсный элемент может быть закрыт. Если эта функция



1 ... 116 117 118 [ 119 ] 120 121 122 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика