1

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が少しスクロールして、アイテムが完全に表示されます。

4

3 に答える 3

5

メッセージマップ:

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);
}
于 2009-09-21T21:59:19.470 に答える
3

マウスホイールのスクロールは、OnMouseWheel をトリガーします。

于 2009-10-25T15:26:14.147 に答える
0

はるかに優れた解決策は、親ウィンドウに送信される通知を使用LVN_BEGINSCROLLすることです。LVN_ENDSCROLL(マウスホイールのスクロールも考慮されます。)

それでも、ユーザーがキーボードを使用してフォーカスされたリスト項目を上下に移動するときに発生するスクロールは解決されません。

于 2019-02-01T10:37:19.503 に答える