Как обрабатывать события для динамически создаваемых объектов в MFC? - PullRequest
0 голосов
/ 03 июня 2011

Мне интересно, как я могу обработать событие для динамически создаваемой переменной, например, элемент управления списком.

CListCtrl* pList = new CListCtrl();<br/>
pList->Create(...);

Как мне обработать событие LVN_ITEMCHANGED для pList?

OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)
{
   //do stuff
}

Нужно ли создавать расширенный CListCtrl или есть другой способ? Я бы предпочел не создавать расширенный класс.

1 Ответ

1 голос
/ 03 июня 2011

LVN_ITEMCHANGED отправляется через сообщение WM_NOTIFY от элемента управления его родительскому элементу, поэтому вам просто нужно добавить функцию-обработчик LVN_ITEMCHANGE в родительский класс (например, CMyDlg):

В заголовочном файле:

class CMyDlg : public CDialog
{
   ...
protected:
   afx_msg void OnLvnItemChanged(NMHDR *pNMHDR, LRESULT *pResult);
   ...
}

В исходном файле:

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
   ...
   ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, &CMyDlg::OnLvnItemChanged)  
   ...
END_MESSAGE_MAP()

...

void CMyDlg::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); 
   *pResult = 0;
   ... // examine *pNMLV members for item's information
}

Неважно, как создается элемент управления CListCtrl (через редактор ресурсов или динамически), подход тот же. Просто убедитесь, что вы используете правильный элемент управления ID в ON_NOTIFY записи карты сообщений. (ID передано Create / CreateEx или определено в Свойствах в редакторе ресурсов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...