События мыши CListCtrl не работают
У меня есть CListCtrl в CDialog. И большинство событий не вызывается для CListCtrl. Например, OnMouseMove не вызывается, когда мой указатель мыши находится на CListCtrl, но работает, если указатель мыши находится на окне или editcontrol и т. Д.
Примечание: мой CListCtrl настроен на представление отчета.
Кто-нибудь может объяснить это поведение?
1 ответ
Я только что перенес аналогичные симптомы (сообщается в вопросе "MFC CListCtrl не появляется после минимизации восстановления" под моим именем). Я точно так же, как и вы, обнаружил, что многие сообщения не появляются там, где, как вы думаете, они должны, а некоторые вообще нет. И другие нашли то же самое. Я решил это, создав собственный класс, наследующий от CListCtrl, и просто переопределив OnNotify (...). Затем я обнаружил, что получил сообщения, поймал в ловушку только те, которые хотел, и пересмотрел поведение в соответствии со своим классом. (Я просто предотвращал изменение ширины столбцов.) В моем случае никакой другой код не требовался.
BOOL CCompilationListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam;
{
if(pHDN->hdr.code == HDN_BEGINTRACKW || pHDN->hdr.code == HDN_BEGINTRACKA)
{
*pResult = TRUE;
return TRUE;
}
if(pHDN->hdr.code == HDN_ENDTRACKW || pHDN->hdr.code == HDN_ENDTRACKA)
{
*pResult = TRUE;
return TRUE;
}
if(pHDN->hdr.code == HDN_DIVIDERDBLCLICKW || pHDN->hdr.code == HDN_DIVIDERDBLCLICKA)
{
*pResult = TRUE;
return TRUE;
}
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}