ListView onScroll event

前端 未结 4 1441
小蘑菇
小蘑菇 2020-12-01 14:43

I’m programming one easy C# application, and i need onScroll event on Listview. So i created class ListviewEx witch inherits original ListView. I found how to detect scroll

4条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-01 15:29

    You can define WParam constants as followed:

    private const int WM_HSCROLL = 0x114;
    private const int WM_VSCROLL = 0x115;
    
    private const int SB_HORZ = 0;
    private const int SB_VERT = 1;
    
    private const int SB_LINELEFT = 0;
    private const int SB_LINERIGHT = 1;
    private const int SB_PAGELEFT = 2;
    private const int SB_PAGERIGHT = 3;
    private const int SB_THUMBPOSITION = 4;
    private const int SB_THUMBTRACK = 5;
    private const int SB_LEFT = 6;
    private const int SB_RIGHT = 7;
    private const int SB_ENDSCROLL = 8;
    
    private const int SIF_TRACKPOS = 0x10;
    private const int SIF_RANGE = 0x1;
    private const int SIF_POS = 0x4;
    private const int SIF_PAGE = 0x2;
    private const int SIF_ALL = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
    

    The actual code to inspect the WParam would be something like this:

    if (m.Msg == WM_VSCROLL)
    {
    
            ScrollInfoStruct si = new ScrollInfoStruct();
            si.fMask = SIF_ALL;
            si.cbSize = (uint)Marshal.SizeOf(si);
            GetScrollInfo(msg.HWnd, SB_VERT, ref si);
            if (msg.WParam.ToInt32() == SB_ENDSCROLL)
            {
                ScrollEventArgs sargs = new ScrollEventArgs(ScrollEventType.EndScroll, si.nPos);
                onScroll(this, sargs);
            }
    }
    

    pinvoke.net is a great site to get the constant values used in windows32 API without having to inspect header files yourself.

    See this example

提交回复
热议问题