Обрабатывает извещения функция CWnd::OnNotify():
virtual BOOL CWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
Эта функция по умолчанию проверяет карту сообщений. Вы ее не отменяйте. В смысле никогда. Но перегрузить ее Вы можете для того, чтобы обрабатывать динамически созданные элементы управления как в "Шаг 255 - Использование Windows Common Controls". Для статических элементов управления Вы можете использовать ClassWizard для формирования макросов обработки. Вот как формируется извещение для TreeView:
В карту сообщений будет записан следующий код:
...... ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1) ......
ON_NOTIFY стандартный макрос обрабоки извещений:
ON_NOTIFY( wNotifyCode, \\ код сообщения id, \\ идентификатор memberFxn \\ функция обработки )
Функция обработки должна иметь следующий вид:
afx_msg void memberFxn( NMHDR * pNotifyStruct, // указатель на структуру LRESULT * result // указатель на код возврата );
Для обработки уведомлений от нескольких элементов одной функции можно использовать ON_NOTIFY_RANGE:
ON_NOTIFY_RANGE( wNotifyCode, id, // первый идентифкатор idLast, // последний идентификатор memberFxn )
Функция обработки немного поменяется:
afx_msg void memberFxn ( UINT id, // идентификатор элемента управления NMHDR * pNotifyStruct, LRESULT * result );
Для обработки сообщения несколькими объектами используется ON_NOTIFY_EX или ON_NOTIFY_EX_RANGE. В данном случае функция должна возвращать BOOL для того, чтобы сообщить надо ли дальше обрабатывать извещение:
ON_NOTIFY_EX( nCode, id, memberFxn ) ON_NOTIFY_EX_RANGE( wNotifyCode, id, idLast, memberFxn ) afx_msg BOOL memberFxn ( UINT id, NMHDR * pNotifyStruct, LRESULT * result );
Если извещение было полностью обработано, то вернуть надо TRUE, иначе FALSE.