Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Leoleshucov008
14 / 14 / 6
Регистрация: 23.02.2010
Сообщений: 221
#1

Как организовать события в С++ - C++

12.04.2014, 16:34. Просмотров 364. Ответов 0
Метки нет (Все метки)

Привет, форумчане. Задача у меня такая - нужно написать простенький графический редактор для курсача. Использовать windows forms нельзя. А в качестве графической библиотеки преподаватель разрешает использовать только WinBGIm. В программе будет 3 типа кнопок (выбор цвета, инструмента и кнопки управления) и само поле для рисования.
Возникла следующая проблема - эти элементы(кнопки и поле рисования) должны реагировать на события (клик, движение курсора). В предложенной библиотеке есть функция -registermousehandeler(kind, h), которая вызывает функцию h при генерации события типа kind. Но вот если напрямую для каждой кнопки забиндить функцию нажатия, то после генерации этого события будет вызвано n-ое количество функций, что не эффективно, так как сработать должна только одна. Поэтому я решил сделать так - массив элементы которого - структура Event
C++
1
2
3
4
5
struct Event {
    Object *o; //Объект 
    EventType type; //Тип события
    Point lt, rb; //Координаты на которых прослушивается событие (левый верхний и правый нижний углы)
};
Функция ExecuteEvent которая при вызове события ищет в массиве подходящий элемент и в зависимости от типа события вызывает соответствующий метод объекта. Но Object - это базовый класс, а классы кнопок это наследники класса Object и у них переопределены методы реагирования на события.
C++
1
2
3
4
5
6
7
8
9
class Object {  
public:
    //Events Functions
    virtual void LBDown(int x, int y){};
    virtual void LBUp(int x, int y){};
    virtual void MMove(int x, int y){};
};
class ColorButton :public Object{};
class ToolButton :public Object{};
Но теперь, функцией реагирования на событие будет метод, который определен в классе Object. А мне нужно вызвать метод класса ColorButton либо для ToolButton. Как это сделать? Или может быть кто-нибудь предложит другой вариант решения этой задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2014, 16:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как организовать события в С++ (C++):

как организовать ?
вот такой вопрос нужно написать программу которая определяет минимальное число...

Как определить объект события?
Здравствуйте, как определить объект событие например на кнопке изменился текст,...

Как спровоцировать выполнение события?
Вся обработка начинается в событии FormShow. Идея такова, программа,...

Как организовать класс?
Очень хочу сделать класс который заранее не определён, т.е. имена классов и их...

Как организовать таймер?
Как мне в VC++ организовать таймер, задержку или что то в этом роде......

Как организовать меню..в Си...
при помощи case кто знает?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2014, 16:34
Привет! Вот еще темы с решениями:

как организовать конвейер
как организовать передачу результатов одного приложения в другое по конвейеру...

Как организовать цикл
Добрый Вечер! Пытаюсь создать консольную игру "Сапер". Не могу понять как...

Как организовать цикл?
Здравствуйте. Вообщем имеется уравнение,в правой части которого идёт...

Как организовать корректный ввод?
Добрый день всем. Собственно говоря вопрос такой есть класс data, я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru