BOOL CMyListBox::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{//这个消息,我却不知道怎么判断滚动条的滚动"时",滚到初始位置(初始位置:就是程序运行后,列表控件的滚动条的开始位置),还是不是初始位置,有办法吗??? 是否,可以直接操作滚动条对象呀???
//return CListBox::OnMouseWheel(nFlags, zDelta, pt);
return 1;}

解决方案 »

  1.   

    直接操作滚动条对象,不可以,因为看起来所谓的滚动条其实根本不是控件,他只是listbox非客户区的一部分。你可以用与滚动条相关的函数来设置参数,
    比如SetScrollInfo设置滚动条 滑块的pos以及高度
    ShowScrollBar来显示或隐藏滚动条
      

  2.   

    这个结构体
    SCROLLINFO sif;
    用GetScrollInfo获取后,
    如果sif.nPos == 0,做你想做的
      

  3.   

    BOOL CMyListBox::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
    {
    // TODO: Add your message handler code here and/or call default
    afxDump << m_vPos << "\n";
    if(m_Total > m_Client)
    {
    int dir=zDelta > 0 ?  SB_LINEUP : SB_LINEDOWN;
    OnVScroll(dir, 0, 0);
    }
    return TRUE;// done
    }
      

  4.   

    WM_VSCROLL消息。
    WM_VSCROLL
    WPARAM wParam;
    LPARAM lParam;
    参数
    wParam
    SB_TOP 滚动到顶端//这个消息咋使用???赶紧加上我qq行不。//按你的意思,写成这样。但是,发现滚轮滚动第一次之后,没反应。滚动第二次,才有反应!
     滚回去也是。滚到头 也没反应。再滚动一次才行!有参数是记录滚动次数的吗?
    BOOL CMyListBox::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    SCROLLINFO sif;
    GetScrollInfo(SB_VERT,&sif); if(sif.nPos == 0)
    {
    Valbmp = 0;//==0 切换一张图片,
    }
            else if(sif.nPos > 0)
    {
    Valbmp = 1;//==1 切换另一张,
    } Invalidate();
    return CListBox::OnMouseWheel(nFlags, zDelta, pt);
    //return 1;
    }
      

  5.   

    无语 ,你这些变量都是自定义,我发你伪代码,你都不想看,你觉得我能看懂吗???姐姐???WM_VSCROLL消息。 
    WM_VSCROLL WPARAM wParam; LPARAM lParam;
    参数 wParam SB_TOP 滚动到顶端//这个消息咋使用??? 
      

  6.   

    SCROLLINFO sif = { sizeof(SCROLLINFO),SIF_ALL,0,0,0,0 };  参照SCROLLINFO结构体,你自己补全吧
    GetScrollInfo(SB_VERT,&sif);

    最后记得SetScrollInfo
      

  7.   

    在 类的 数据 定义 中 可以 看到 int m_vPos;
    m_ 模块变量
    v  垂直 vertical
    Pos 滚动位置。
     
      

  8.   


    if(m_Total > m_Client)
    //这俩变量啥意思
      

  9.   

    m_Total 是listbox 总的 项 数。
    m_Client 是 listbox 客户区域 能 包含的 项数
      

  10.   

    你下载的程序里 不是有吗?
    m_Total 是 addstring 或 insert 时 ++;
    m_Client 是 listbox 客户区域 高 除以 每项 高。
    以 搜索 这 2 项 ,可以看到 在 哪里 初始化
      

  11.   


    if(m_Total > m_Client)
    //滚动时,第一页数据全部滚动完,
    然后,int dir=zDelta > 0 ?  SB_LINEUP : SB_LINEDOWN;
    //如何滚轮是整数是up 负数时down 对吧;我记的如何此时down是-360 再up一下时,不是-240,你怎么能根据正负来判断呢 ?????????????????????
    下面在调用滚轮函数
      

  12.   

    你可以 afxDump << zDelta << "\n";
    他不是 +120 就是 -120. 没见过 240 的。
      

  13.   


    BOOL CMyListBox::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    SCROLLINFO sif = { sizeof(SCROLLINFO),SIF_ALL,0,0,0,0 };  ;
    GetScrollInfo(SB_VERT,&sif);
    //Get ,再Set有啥区别呢??? 还是那个样子,我滚轮初始时,滚一次,nPos还是 == 0,滚回去,也是滚到头 不是0;要滚俩次 0 变 1
    //滚回去也是 滚俩次才是0
    SetScrollInfo(SB_VERT,&sif);
    if(sif.nPos == 0)
    {
    Valbmp = 0;
    }
        else if(sif.nPos > 0)
    {
    Valbmp = 1;
    }

    Invalidate();
    return CListBox::OnMouseWheel(nFlags, zDelta, pt);
    //return 1;
    }