События мыши 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);
}
Другие вопросы по тегам