Главная

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

Есть окно. В этом окне есть child BView (назовём его View1). У View1, в свою очередь тоже есть child — назовём его View2.

Теперь, собственно, вопрос: как перехватить сообщения посылаемые View2 (например B_MOUSE_DOWN), для обработки их в View1? Т.е. View1 должен получить B_MOUSE_DOWN, если было нажатие мышем на View2.

BHandler::StartWatching() — вроде то, что нужно, но ничего не вышло :(

Re: Перехват сообщения

А зачем так?
Получаешь сообщение в View2::MouseDown() автоматом и из этого метода делаешь что хочешь — пересылаешь сообщение любому хандлеру, например View1 или родительскому окну, или просто вызываешь методы View1 оттуда.

А простым образом View1 перехватить сообщения для View2 не может (да это и не нужно). Может их родительское окно.

Ну и еще, есть функция, которая устанавливает для мышиных и клавиатурных событий видимость за пределами View.

В твоем случае ее нужно применить во View1, чтоб он получал ВСЕ события — но это не слишком удобно.

Re: Перехват сообщения

Действительно плохая задумка. Зачем старщему BView перехватывать сообщения сових чайлдов? Он должен как–то реагировать на кликание своих чайлдов?

К стати понятие «перехватить сообщение» исходит из вин программирования. Советую тебе поменять образ мыслей, здесь решения каторые хороши для масдая мало эффективны. Просто потому, что масдай несет на себе тяжкий груз совместимости. Сообщения же это понятие из ООП, а так как масдай замешивался на основе стрктурного подхода то сообщения (да и потоки) для него инородное понятие и следовательно их реализация есть мягко говоря компромис.

Re: Перехват сообщения

Конечно, можно сделать так, чтобы View2 сам отсылал сообщение своему родителю (View1).

Но этот метод хорош если на View1 только пара–тройка child'ов. А если их, скажем, 10 — писать одинаковые обработчики MouseDown для них всех не оптимально, да ещё придётся каждому дать указатель на View1 (может я и ошибаюсь, но в BeBook я не видел метода, возвращающего указатель на parent).

Как я понял из описания BHandler::StartWatching, эта штука как раз для таких целей (View2 — notifier, View1 — observer), но на практике у меня ничего не вышло.

Поэтому надо попробовать ту функцию, о которой ты говоришь (кстати, как она называется ?).

Зачем мне это нужно? Скажем есть панель (View1) с child'ами, при клике внутри фрейма View1 мне нужно кое–что сделать. Если кликнули по какому–либо из child'ов — понятно что View1 сообщение не получит. Вот это и надо победить.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
z
y
s
8
N
m
Enter the code without spaces and pay attention to upper/lower case.