Как отловить событие прокрутки в CListCtrl? - PullRequest
1 голос
/ 22 сентября 2009

Я вложил класс CListCtrl в свой собственный класс и использую его в нескольких диалогах и представлениях. Что я хочу сделать, это выполнить некоторый код, когда ClistCtrl прокручивается вертикально. Мне нужно, чтобы это было в самом подклассе CListCtrl.

Я могу обнаружить прокрутку, срабатывающую при взаимодействии с полосой прокрутки с помощью метода, предоставленного demoncodemonkey:

messagemap:

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_WM_VSCROLL()
END_MESSAGE_MAP()

объявление метода:

class CMyListCtrl : public CListCtrl
{
    //...
protected:
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    DECLARE_MESSAGE_MAP()
};

Реализация метода:

void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    //do some stuff here
    CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}

Но:

  • Прокрутка колесика мыши не срабатывает OnVScroll.

  • происходит автоматическая прокрутка когда элемент CListCtrl частично видна внизу нажата (это прокручивается вверх, поэтому элемент полностью видно) не срабатывает OnVScroll либо. Например:

partialy visible item

При нажатии на элемент 9 ClistCtrl немного прокручивается, поэтому элемент полностью виден.

Ответы [ 3 ]

5 голосов
/ 22 сентября 2009

карта сообщений:

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_WM_VSCROLL()
END_MESSAGE_MAP()

объявление метода:

class CMyListCtrl : public CListCtrl
{
    //...
protected:
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    DECLARE_MESSAGE_MAP()
};

Реализация метода:

void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    //do some stuff here
    CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
3 голосов
/ 25 октября 2009

Триггер прокрутки колесика мыши OnMouseWheel.

0 голосов
/ 01 февраля 2019

Гораздо лучшим решением является использование уведомлений LVN_BEGINSCROLL или LVN_ENDSCROLL, которые отправляются в родительское окно. (Они также учитывают прокрутку колесиком мыши.)

Хотя это по-прежнему не решает прокрутку, возникающую, когда пользователь перемещает элемент фокусированного списка вверх и вниз с помощью клавиатуры.

...