为什么CDialog的滚动条不能象ListView等视图的滚动条一样随着RANGE的变化滚动条的大小发生相应变化??我应该怎么做啊?
谢谢大家!

解决方案 »

  1.   

    在OnSize 里边自己写代码处理!
      

  2.   

    变通的方法是 从 CScrollDialog继承,就会有同样的效果
      

  3.   

    在对话框的OnInitDialog()中加入:
    SetScrollRange(SB_HORZ, 0, nMax, TRUE);
    响应WM_HSCROLL消息,在其中加入:
    CYourDlg::OnHScroll(...)
    {
    SCROLLINFO scrollInfo;
    GetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    switch (nSBCode)
    {
    case SB_LINELEFT:
    scrollInfo.nPos -= 1;
    if (scrollInfo.nPos < scrollInfo.nMin)
    {
    scrollInfo.nPos = scrollInfo.nMin;
    break;
    }
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    ScrollWindow(10, 0);
    break;
    case SB_LINERIGHT:
    scrollInfo.nPos += 1;
    if (scrollInfo.nPos > scrollInfo.nMax)
    {
    scrollInfo.nPos = scrollInfo.nMax;
    break;
    }
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    ScrollWindow(-10, 0);
    break;
    case SB_LEFT:
    ScrollWindow((scrollInfo.nPos - scrollInfo.nMin) * 10, 0);
    scrollInfo.nPos = scrollInfo.nMin;
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    break;
    case SB_RIGHT:
    ScrollWindow(-(scrollInfo.nMax - scrollInfo.nPos) * 10, 0);
    scrollInfo.nPos = scrollInfo.nMax;
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    break;
    case SB_PAGELEFT:
    scrollInfo.nPos -= 5;
    if (scrollInfo.nPos < scrollInfo.nMin)
    {
    scrollInfo.nPos = scrollInfo.nMin;
    break;
    }
    SetScrollInfo(SB_HORZ,&scrollInfo,SIF_ALL);
    ScrollWindow(10 * 5, 0);
    break;
    case SB_PAGERIGHT:
    scrollInfo.nPos += 5;
    if (scrollInfo.nPos > scrollInfo.nMax)
    {
    scrollInfo.nPos = scrollInfo.nMax;
    break;
    }
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    ScrollWindow(-10 * 5, 0);
    break;
    case SB_ENDSCROLL:
    break;
    case SB_THUMBPOSITION:
    break;
    case SB_THUMBTRACK:
    ScrollWindow((scrollInfo.nPos - nPos)*10, 0);
    scrollInfo.nPos = nPos;
    SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
    break;
    }
    }