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

1 ... 118 119 120 [ 121 ] 122 123 124 ... 159


В НОВОЙ версии программы имеются следующие изменения и дополнения.

1. Изменен параметр конструктора для объекта класса TButton:

new TButton{this,BUTTONJD, my button , 100,50,80,30); Здесь аргумент Id получает значение BUTTONJD. Константа BUTTONJD задана с помощью директивы #defme BUTTONJD 101 (значение этой константы равно 101). Директиву #define можно заменить следующим описанием:

const WORD BUTTONJD =101;

где тип WORD эквивалентен типу unsigned short. Разрешается выбирать любую константу, которая не используется в библиотеке ObjectWindows. Если теперь нажать кнопку (рис. 9.14), то будет автоматически генерироваться сообщение с именем BUTTON ID. Поскольку BUTTONJD= 101, константа 101 будет использоваться позже нашей программой, чтобы распознать это сообщение.

2. Класс DrawButton объявлен следующим образом: class DrawButton : public TWindow

public:

DrawButton(TWindow* parent = 0); void HandleButtonMessageO;


Наше главное окно

2. Кнопка посылас! сообтсппс с >т1икал1,пым HOMq)oM Id

3. Объект DrawBution перехватывает сообнгепис

Объекг I-DrawBuHon,

1. Нажатие кнопки

4. Обтлгкт DrawButton реядтфуе на сробиюкне (напримсз, вьпшает соответствутйЦ)!© функцию отклика, которая датаёт что-то полезное)

Рис. 9,14. Генерация и обработка сообщений



DECLARE RESPONSE TABLE(DrawButton);

Здесь объявляется таблица отклика, которая имеет один аргумент DrawButton. Наряду с объявлением необходимо описать таблицу отклика. Такое описание можно поместить в любом месте программы за пределами класса. Оно начинается директивой DEFINE RESPONSE TABLEl с цифрой 1 в виде суффикса. Если задается цифра 1, то это является указанием компилятору на то, что наш класс (DrawButton) имеет один класс родитель (TWindow). Если используется множественное наследование и наш класс имеет два родителя, то необходимо использовать директиву DEFINE RESPONSE TABLE2. В общем случае это макроописание задается в виде DEFINE RESPONSE TABLE# и имеет #+1 аргументов, которыми являются:

имя класса, в котором объявлена таблица отклика; последовательность из # имен всех непосредственных родителей (базовых классов).

В нашем примере описание таблицы отклика является очень простым:

DEFINE RESP0NSE TABLE1(DrawButton,TWindow)

EV COMMAND(BUTrONJD,HandleButtonMessage),

END RESPONSE TABLE;

где DrawButton - наш класс и TWindow - его непосредственный базовый класс. Директива END RESPONSE TABLE завершает описание. Все директивы, записанные между DEFINE RESPONSE TABLE# и END RESPONSE TABLE, называются входами таблицы отклика. В нашем примере задан только один вход. Директива, описывающая вход, должна всегда оканчиваться запятой, а директива END RESPONSE TABLE - точкой с запятой.

Различают два основных типа входов: обрабатывающих сообщения пользователя и обрабатывающих сообщения системы WINDOWS. В нашем примере мы использовали первый тип (сообщение генерируется, когда пользователь нажимает кнопку). Используемое выше макроимя EV COMMAND требует два параметра (аргумента) и устанавливает соответствие между первым и вторым параметрами. Первый аргумент задает имя поступающего сообщения, которое мы хотим пере-



хватить и обработать. Второй аргумент определяет имя функции, которая должна быть вызвана в ответ на поступившее хообщение. Эта функция должна быть объявлена в том же классе (DrawButton). На рис. 9.15 демонстрируются основные этапы обработки сообщения. Окончательно, при нажатии кнопки, будет вызвана функция HandleButtonMes-sage.

3. Функция HandleButtonMessage описана следующим образом:

void DrawButton :: HandleButtonMessageO { MessageBox( was pressed , Button ); }

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

int MessageBox(const char far* text,

const char far* caption = 0, UINT type = MB OK);

где text - указатель на строку, которая отображается внутри окна сообщений; caption - указатель на строку, которая отображается в виде заголовка окна сообщений (если caption=0, то отображается строка, заданная по умолчанию);1уре - константа системы WINDOWS (тип UINT эквивалентен типу unsigned int). Задание констант WINDOWS позволяет выво-


3. Перехват сообщения

DEFINE...

EV C0MMANn(Bi;TTON lD .iHaiidleBullonMessaM), END... - --

4. Вызов функции HandleBultonMcssage шш обработки сообщения

Рис. 9.15. Этапы обработки сообщений



1 ... 118 119 120 [ 121 ] 122 123 124 ... 159

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