Информатика и технология программирования


Система объектов, управляемых сообщениями - часть 6


Поскольку данный класс является промежуточным, то его объекты на сообщения никак не реагируют.


// Класс "Видимая точка" ---------------------------


class PT : public OBJ
{ char sym; // Отображаемый символ


int x,y; // Координаты точки


public:
PT(char); // Конструктор


~PT(); // Деструктор


void on(); // Высветить


void off(); // Погасить


void up(); // Перемещения точки


void down();
void left();
void right();
void OnPlace(int,int); // Позиционирование точки


void HandleEvent(MS *); // Обработка сообщений


};
//--------------------------------------------------------------


PT::PT(char c) { sym = c; x = 0; y = 0; }


void PT::off() { gotoxy(x+1,y+1); putch(' '); }


void PT::on() { gotoxy(x+1,y+1); putch(sym); }


void PT::OnPlace(int xx, int yy) {off(); x = xx; y = yy; on(); }


void PT::left() { off(); if (x &#62 0) x--; on(); }


void PT::right() { off(); if (x &#60 79) x++; on(); }


void PT::up() { off(); if (y &#62 0) y--; on(); }


void PT::down() { off(); if (y &#60 24) y++; on(); }


PT::~PT() {off(); }


void PT::HandleEvent(MS *pm) {}

Курсор - это " видимая точка" , которая управляется с клавиатуры, поэтому этот объект выделяет сообщения от клавиатуры с соответствующими кодами и вызывает для них методы перемещения из класса " видимой точки" .


// Класс " Курсор - управляемый с клавиатуры"


class MOUSE : public PT
{ public:
void HandleEvent(MS *);
MOUSE();
~MOUSE();
};
//--------------------------------------------------------------


MOUSE::MOUSE() : PT('&#35') // Конструктор - сконструировать


{ OnPlace(40,12); } // точку " &#35" и установить ее на 40,12



void MOUSE::HandleEvent(MS *pm)
{
switch (pm-&#62code)
{ // Реакция курсора на сообщения от клавиатуры


case ms_KEYB:
switch(pm-&#62x)
{
case '8': up(); pm-&#62clear(); break;
case '2': down(); pm-&#62clear(); break;
case '4': left(); pm-&#62clear(); break;
case '6': down(); pm-&#62clear(); break;
case '0': pm-&#62clear(); SendEvent(ms_KILL,0,0,(void *)(OBJ *)this); break;



Начало  Назад  Вперед



Книжный магазин