Re: Нажатие по CListView
От: Alex Fedotov США  
Дата: 15.12.01 06:32
Оценка: 6 (2)
Здравствуйте GoodWin, Вы писали:

GW>Помогите разобраться, — необходимо обработать нажатие мышкой

GW>по заголовку колонки в просмотре списка:
GW>class CMyListView: public CListView

GW>Делаю я так:


GW>BOOL CMyListView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)

GW>{
GW> NMHDR *nmhdr =(NMHDR*)lParam
GW> //char s[200],si[20];
GW> //itoa(nmhdr->code,si,10);
GW> //sprintf(s,"Код извещения: %s",si);
GW> switch (nmhdr->code)
GW> {
GW> case LVN_COLUMNCLICK:
GW> {
GW> AfxMessageBox("Нажатие по колонке");
GW> break;
GW> }
GW> //default:AfxMessageBox(s);
GW> }
GW> return CListView::OnNotify(wParam, lParam, pResult);
GW>}

GW>Но при нажатии по колонке, в case LVN_COLUMNCLICK я не попадаю.

GW>Может надо какое другое соообщение перехватывать или я вообще
GW>не правильно всё делаю.

Скорее, вообще все неправильно.

Сообщение WM_NOTIFY посылается списком его родительскому окну. Ты же пытаешься обработать это сообщение в окне самого списка, естественно, оно туда не попадает. То есть надо либо перенести обработчик в родительское окно списка, либо воспользоваться механизмом message reflection (отражение сообщений) в MFC, который переадресует такие сообщения обратно списку.

Подробно механизм message reflection описан в MFC Technical Note TN062: Message Reflection for Windows Controls. Вкратце, нужно в карту сообщений CMyListView вставить запись

ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)

и добавить обработчик OnColumnClick:

afx_msg void OnColumnClick(NMHDR * pNMHDR, LRESULT * pResult);

Успехов,
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.