Здравствуйте 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 вставить запись