CListCtrlを自分のクラスにサブクラス化し、いくつかのダイアログとビューで使用しています。私がやりたいのは、ClistCtrlが垂直方向にスクロールされているときにコードを実行することです。これをCListCtrlサブクラス自体に含める必要があります。
demoncodemonkeyによって提供されるメソッドを使用して、スクロールバーを操作するときにトリガーされるスクロールを検出できます。
メッセージマップ:
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をトリガーしませんでした。例えば:
アイテム9をクリックすると、ClistCtrlが少しスクロールして、アイテムが完全に表示されます。