| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Один обработчик событий для нескольких контролов? |
| Автор: elterrible 3.6.2010, 16:56 |
| Есть несколько чекбоксов, клики на которых обрабатываются совершенно одинаково, соответственно хотелось написать один обработчик событий для них. Но, насколько я понимаю, указать в месседж мапе обработчик с аргументами нельзя (а хотелось передать ID чекбокса). Соответственно нужен какой то способ получить ID контрола в обработчике. Есть ли такая возможность ? |
| Автор: Albor 3.6.2010, 17:54 |
| Обрабатывай OnCommand(). Там и получишь контрол от которого пришла команда. |
| Автор: elterrible 3.6.2010, 20:47 |
| Earnest, спасибо. Не могу понять только, обработчики ON_COMMAND_* будут срабатывать на любое событие ? Есть ли возможность отфильтровать только клики ? |
| Автор: Albor 4.6.2010, 11:21 | ||
Получить данные контрола в OnCommand не проблема:
Earnest, а чем плох OnCommand? |
| Автор: Earnest 4.6.2010, 17:16 |
| elterrible, они только на клики и будут срабатывать. Если внимательно посмотреть, то ON_BN_CLICKED и ON_COMMAND - абсолютно одна фигня. Но если очень сильно хочешь, то можно вместо ON_COMMAND_* использовать ON_CONTROL_* - там вроде та же семантика обработчиков, только нужно еще указать доп. параметр - уведомление, тот самый BN_CLICKED. Но фишка в том, что BN_CLICKED - это 0, поэтому можно просто использовать ON_COMMAND. Albor, он не плох, а просто предназначен для других целей. Переопределять его для обработки конкретных контролов - микроскопом гвозди забивать. Для этих целей лучше использовать OnCmdMsg, если хочешь обойтись без карты обработчиков. Во-первых, по принципу - выбираем ближайший к точке перехвата виртуальный метод (а OnCmdMsg ближе - по стеку), а во вторых - там же можно обработать и апдейты тех же контролов, что обычно имеет смысл. Но не в данном случае - я уже говорила насчет микроскопа. Выбирать нужно самый простой метод из доступных. |
| Автор: elterrible 4.6.2010, 22:38 |
| Earnest, Albor, большое спасибо, все получилось. |