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 руб./мес


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




 287 - Извещения Notification и чем они отличаются от сообщений / MFC шаг за шагом / Visual C++

Шаг 287 - Извещения Notification и чем они отличаются от сообщений

В Windows 3.1 элементы управления посылали сообщения о своем состоянии, например, нажатии кнопки или изменении выбора используя сообщение WM_COMMAND с кодом состояния, например, BN_CLICKED и идентификатором помещенным в IParam и дескриптором в WParam. Как видите все занято и дополнительную информацию послать нельзя. Например, положение мыши. Для посылания дополнительных данных использовались дополнительные сообщения типа:

......
WM_VSCROLL 
WM_HSCROLL 
WM_DRAWITEM 
WM_MEASUREITEM
......

Поддержка этих сообщений в WIN32 осталась, но теперь при необходимости передачи новых данных решено использовать не создание новых сообщений, так как это связано с переработкой API, а универсального извещения WM_NOTIFY. Вместе с ним можно передать любое количество дополнительных данных.

WM_NOTIFY сообщения содержат идентификатор элемента управления посылающего сообщение в wParam и указатель на структуру в lParam. Это структура NMHDR, она описана в "Подробности - Структура NMHDR". Здесь есть некоторые тонкости. Дело в том, что структура может быть намного больше. То есть структура NMHDR будет первой структурой внутри другой большой структуры. Фактически структурой NMHDR является очень маленькое извещение, обычно это более большая структура. Например, извещение LVN_KEYDOWN - это вот такая структура:

typedef struct tagLV_KEYDOWN 
{
    NMHDR hdr;   
    WORD wVKey;  
    UINT flags;  
} LV_KEYDOWN;

Как видите указатель на эту структуру можно привести и к NMHDR и к LV_KEYDOWN. Каждый новый элемент управления Windows поддерживает следующие извещения:

  • NM_CLICK - Нажатие на кнопку
  • NM_DBLCLK - Двойное нажатие на кнопку
  • NM_RCLICK - Нажатие правой кнопкой
  • NM_RDBLCLK - Двойное нажатие правой кнопкой
  • NM_RETURN - Нажатие ENTER и элемент управления имеет фокус
  • NM_SETFOCUS - Получение фокуса
  • NM_KILLFOCUS - Потеря фокуса
  • NM_OUTOFMEMORY - Нехватает памяти однако :-)

Пример когда структура больше чем NMHDR смотрите в "Шаг 182 - Редактирование по месту CTreeView", там как раз обрабатываются подобные извещения. Как обрабатывать извещения без Class Wizard в "Шаг 255 - Использование Windows Common Controls".


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