解决方案 »

  1.   

     CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);   
    //   CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);   
      

  2.   

    到函数OnHScroll时,滚动条的位置就已经设置了,不需要再SetScrollPos,因为通常在OnHScroll时只是判断滚动条位置,然后ScrollWindow滚动界面。楼上说的好像有误。
      

  3.   

    滚动条拖动的时候会向父窗口发出WM_HSCROLL消息
    消息映射将该消息映射到OnHScroll,OnHScroll被调用而执行,重新设置新的滚动条位置
      

  4.   


    那么请问  为什么:36行-----39行// 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值   既然要执行36行-----39行进行Edit框的设置,那么就说明这个函数被第二次执行了,既然这个函数被执行了,就会有相应的消息  请问是不是因为m_horiScrollbar.SetScrollPos(pos);   这个函数产生的SBM_SETPOS这个消息,导致了OnHScroll函数的第二次被调用!!!
    SetScrollPos(  )这个函数的解释中这里说明了 当这个函数的参数为SB_CTL就会发出一个SBM_SETPOS的消息。  请问SBM_SETPOS这个消息的消息处理函数是哪个???是OnHScroll???
      

  5.   

    已回答:当你点击滚动条时 , 滚动条会响应DOWN 和 UP(就是你说的2次).
    当 UP 时 会进入 
    default:
    因为通常 不处理 SB_ENDSCROLL (==8)
    即:
    default:
    afxDump << nSBCode << "=SB_ENDSCROLL\n";
    break;