Обработчики событий MFC - PullRequest
       7

Обработчики событий MFC

1 голос
/ 03 ноября 2008

Просто интересно, какова разница между управляющими сообщениями MFC с префиксом следующего:

LVN (e.g. LVN_ITEMCHANGED)
HDN (e.g. HDN_TRACK)
NM (e.g. NM_HOVER)

Кроме того, я использую ListControl и ловушку, когда пользователь нажимает на элемент, используя сообщение NM_CLICK. Я также хочу поймать в ловушку, когда пользователь выбирает новый элемент просмотра ключа, например, клавиши со стрелками вверх / вниз. Может кто-нибудь сказать мне, какое сообщение я должен поймать в ловушку для этого?

Спасибо

Ответы [ 2 ]

4 голосов
/ 03 ноября 2008
  • LVN = ListView Notification
  • HDN = Уведомление управления HeaDer
  • NM = er..um .. "Уведомление для мыши"?
2 голосов
/ 03 ноября 2008

Для изменения выбора необходимо обработать уведомление LVN_ITEMCHANGED:

NMLISTVIEW & nm = *(NMLISTVIEW *) pnmh;
if (  (nm.uNewState ^ nm.uOldState) & LVIS_SELECTED) 
{     
   // nm.iItem was selected or deselected
   if (!m_internalUIChange)
   {
      // see below
   }
}

Первое «если» проверяет, изменилось ли «выбранное» состояние. Обратите внимание, что при выборе другого элемента в списке он по-прежнему срабатывает дважды: один раз для отмены выбора старого элемента и один раз для выбора нового элемента. Это необходимо, однако, для получения "полного отмены выбора".

Это уведомление срабатывает очень часто - даже при программном изменении элемента управления. Если ваш обработчик должен реагировать только на пользовательские события, вам потребуется по крайней мере флаг, который вы устанавливаете для этих операций (для этого я использую класс вместе с RAII-Lock, поэтому я не забываю его сбросить)

...