我將CListCtrl分類到我自己的類中,並在幾個對話框和視圖中使用它。我想要做的是在ClistCtrl垂直滾動時執行一些代碼。我需要它在CListCtrl子類本身。如何捕捉CListCtrl中的滾動事件?
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()
};
方法實現:
我可以檢測滾動與方法滾動條由demoncodemonkey提供交互時觸發
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
//do some stuff here
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
但是:
鼠標滾輪滾動不會觸發 OnVScroll。
自動滾動發生 被點擊一個CListCtrl項部分 可見在底部時(它 被滾動了,因此產品 完全可見的)沒有觸發 OnVScroll任一。例如:
partialy visible item http://i37.tinypic.com/2guxtfn.png
點擊項目9使CListCtrl的滾動一點,所以該項目是完全可見。
這很棒,可以檢測到滾動條滾動,鼠標滾輪被忽略,並且當單擊一個CListCtrl項在底部部分可見時發生的自動滾動(它向上滾動,因此它完全可見)也被忽略。我正在編輯我的原始問題以包含這個部分答案。謝謝! – rec 2009-09-22 15:58:53
我確實同意你在這種情況下不會調用WM_VSCROLL,但是如果我寫的回答了你的原始問題,那麼你應該已經接受了我的回答,然後再問了一個不同的問題。 – demoncodemonkey 2009-09-22 19:58:55