C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 288 - Обработка WM_NOTIFY в MFC / MFC шаг за шагом / Visual C++

Шаг 288 - Обработка WM_NOTIFY в MFC

Обрабатывает извещения функция CWnd::OnNotify():

virtual BOOL CWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );

Эта функция по умолчанию проверяет карту сообщений. Вы ее не отменяйте. В смысле никогда. Но перегрузить ее Вы можете для того, чтобы обрабатывать динамически созданные элементы управления как в "Шаг 255 - Использование Windows Common Controls". Для статических элементов управления Вы можете использовать ClassWizard для формирования макросов обработки. Вот как формируется извещение для TreeView:

288.gif (9806 b)

В карту сообщений будет записан следующий код:

......
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.


| |
Автор Каев Артем.
[AD]