powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перехватить чужое сообщение имея адрес его обладателя...
6 сообщений из 6, страница 1 из 1
Перехватить чужое сообщение имея адрес его обладателя...
    #33341152
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заранее прошу прощение за глупый вопрос, но в имеющейся литературе с наскока ответа не нашел.
Подскажите, плз, как в VC++6 в одном классе (А) создать обработчик на событие, возникающее в другом классе (B). При этом не внося изменений в класс В. Иными словами, нужен аналог Борландовского], грубо говоря [SRC c++]B.OnMouseMove = A.MyProc[/SRC
Есть возможность завести поле в классе A для хранения адреса экземпляра класса B, но что это дает и как завернуть его события на свой обработчик?
Есть у наследников CCmdTarget обработчик OnCmdMsg. Может ли он как-то мне помочь?
...
Рейтинг: 0 / 0
Перехватить чужое сообщение имея адрес его обладателя...
    #33341167
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у класса B не предусмотрена возможность вызывать внешнюю функцию, то единственный способ, это сделать наследника от класса B, в котором переопределить все нужные тебе методы. И там уже обрабатывать, если кто-то снаружи определил внешнюю процедуру то запустить ее, иначе запустить перекрытый метод из родительского класса. А в своей программе уже не используешь класс В совсем, а только своего наследника от В.
...
Рейтинг: 0 / 0
Перехватить чужое сообщение имея адрес его обладателя...
    #33341237
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, что халявы не будет.... Сделать класс A наследником класса B в моем случае плохая идея, т.к. класс В очень громоздкий, а класс А наоборот нужен для очень небольшого набора функций, но должен реагировать на события класса В (движения мыши, перерисовка, нажатия клавиш и т.д.). И боюсь, что такой класс как класс А не последний. Соответсвенно каким-то образом надо будет в классе В организовать счетчик ссылок для учета подключенных классов типа А, чтобы при возникновении некого события (например, щелчок мыши), разослать его каждому подключенному классу. Правильно я понимаю?
А что значит - у класса может быть предусмотрена возможность вызова внешней функции? Что Вы имели в виду?
...
Рейтинг: 0 / 0
Перехватить чужое сообщение имея адрес его обладателя...
    #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
Перехватить чужое сообщение имея адрес его обладателя...
    #33341403
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Subclassing ...

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


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