Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перехватить чужое сообщение имея адрес его обладателя... / 6 сообщений из 6, страница 1 из 1
24.10.2005, 18:25
    #33341152
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Заранее прошу прощение за глупый вопрос, но в имеющейся литературе с наскока ответа не нашел.
Подскажите, плз, как в VC++6 в одном классе (А) создать обработчик на событие, возникающее в другом классе (B). При этом не внося изменений в класс В. Иными словами, нужен аналог Борландовского], грубо говоря [SRC c++]B.OnMouseMove = A.MyProc[/SRC
Есть возможность завести поле в классе A для хранения адреса экземпляра класса B, но что это дает и как завернуть его события на свой обработчик?
Есть у наследников CCmdTarget обработчик OnCmdMsg. Может ли он как-то мне помочь?
...
Рейтинг: 0 / 0
24.10.2005, 18:30
    #33341167
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Если у класса B не предусмотрена возможность вызывать внешнюю функцию, то единственный способ, это сделать наследника от класса B, в котором переопределить все нужные тебе методы. И там уже обрабатывать, если кто-то снаружи определил внешнюю процедуру то запустить ее, иначе запустить перекрытый метод из родительского класса. А в своей программе уже не используешь класс В совсем, а только своего наследника от В.
...
Рейтинг: 0 / 0
24.10.2005, 19:22
    #33341237
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Понял, что халявы не будет.... Сделать класс A наследником класса B в моем случае плохая идея, т.к. класс В очень громоздкий, а класс А наоборот нужен для очень небольшого набора функций, но должен реагировать на события класса В (движения мыши, перерисовка, нажатия клавиш и т.д.). И боюсь, что такой класс как класс А не последний. Соответсвенно каким-то образом надо будет в классе В организовать счетчик ссылок для учета подключенных классов типа А, чтобы при возникновении некого события (например, щелчок мыши), разослать его каждому подключенному классу. Правильно я понимаю?
А что значит - у класса может быть предусмотрена возможность вызова внешней функции? Что Вы имели в виду?
...
Рейтинг: 0 / 0
24.10.2005, 21:34
    #33341337
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class B {
  public:
    f() {return  123 ;}
}

class MyB {
  protected:
    MyCallbackArray my_callbacks;
  public:
    SetCallback(MyCallback *callback_function, int callback_type) {
        if(my_callbacks.GetAddress(callback_type) == NULL) {
            my_callbacks.Add(callback_function, callback_type);
        } else {
            my_callbacks.Replace(callback_function, callback_type);
        }
    }

    f() {
       if(my_callbacks.GetAddress(enum_value_for_method_f)) {
          return my_callbacks.RunCallback(enum_value_for_method_f);
       } else {
          return B::f();
       }
    }
};
в классе A работаешь только с MyB . Устанавливаешь ему соотвествующие колбеки если нужно. А если колбек не был установлен пусть работает метод из базового класса B
Ну примерно так, плюс-минус километр :)
...
Рейтинг: 0 / 0
24.10.2005, 23:40
    #33341403
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Subclassing ...

А вообще -- странного ты чего -то хочешь.
...
Рейтинг: 0 / 0
26.10.2005, 18:22
    #33345962
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехватить чужое сообщение имея адрес его обладателя...
Спасибо!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перехватить чужое сообщение имея адрес его обладателя... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]