如题,我在一个基于对话框的项目中又添加了一个非模式对话框,我在VS2008下,在属性的HorizontalScrollbar项改为TRUE,然后添加处理程序,但是好像有问题,请教高手,怎样添加一个滚动条,有示例更好,谢谢
[email protected]这是我邮箱

解决方案 »

  1.   

    对话框上的滚动条是需要自己添加上去的,
    直接用鼠标拖放上去滚动条,或者在对话框的头文件里定义CScrollBar的成员变量,在对话框的OnInitilize()中创建滚动条,再在OnSize()在调整滚动条的位置。并在对话框中添加WM_HSCROLL和WM_VSCROLL消息,在这两个消息函数里处理滚动条的滚动处理代码。
      

  2.   

      BOOL   CTestDlgDlg::OnInitDialog()   
      {   
              SetScrollRange(SB_HORZ,   0,   100);   
              SetScrollRange(SB_VERT,   0,   100);   
      }   
        
      void   CTestDlgDlg::OnHScroll(UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar)     
      {   
      int nCurPos;   
      int nPrevPos;   
      CRect rect;   
        
      GetClientRect(&rect);   
      nPrevPos   =   GetScrollPos(SB_HORZ);   
      nCurPos   =   nPrevPos;   
      switch(nSBCode)   
      {   
      case   SB_LEFT:   
      SetScrollPos(SB_HORZ,   0);   
      ScrollWindow(0,   0);   
      break;   
      case   SB_RIGHT:   
      SetScrollPos(SB_HORZ,   100);   
      ScrollWindow(-rect.Width(),   0);   
      break;   
      case   SB_PAGELEFT:   
      nCurPos   =   nPrevPos   -   10;   
      if(nCurPos   <   0)   
      nCurPos   =   0;   
      SetScrollPos(SB_HORZ,   nCurPos);   
      break;   
      case   SB_PAGERIGHT:   
      nCurPos   =   nPrevPos   +   10;   
      if(nCurPos   >   100)   
      nCurPos   =   100;   
      SetScrollPos(SB_HORZ,   nCurPos);   
      break;   
      case   SB_THUMBPOSITION:   
      SetScrollPos(SB_HORZ,   nPos);   
      break;   
      case   SB_THUMBTRACK:   
      break;   
      case   SB_LINELEFT:   
      nCurPos   =   nPrevPos   -   2;   
      if(nCurPos   <   0)   
      nCurPos   =   0;   
      SetScrollPos(SB_HORZ,   nCurPos);   
      break;   
      case   SB_LINERIGHT:   
      nCurPos   =   nPrevPos   +   2;   
      if(nCurPos   >   100)   
      nCurPos   =   100;   
      SetScrollPos(SB_HORZ,   nCurPos);   
      break;   
      case   SB_ENDSCROLL:   
      break;   
      }   
      nCurPos   =   GetScrollPos(SB_HORZ);   
      ScrollWindow(rect.Width()   *   (nPrevPos   -   nCurPos)   /   100,   0);   
        
      CDialog::OnHScroll(nSBCode,   nPos,   pScrollBar);   
      }   
        
      void   CTestDlgDlg::OnVScroll(UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar)     
      {   
      int nCurPos;   
      int nPrevPos;   
      CRect rect;   
        
      GetClientRect(&rect);   
      nPrevPos   =   GetScrollPos(SB_VERT);   
      nCurPos   =   nPrevPos;   
      switch(nSBCode)   
      {   
      case   SB_LEFT:   
      SetScrollPos(SB_VERT,   0);   
      ScrollWindow(0,   0);   
      break;   
      case   SB_RIGHT:   
      SetScrollPos(SB_VERT,   100);   
      ScrollWindow(-rect.Height(),   0);   
      break;   
      case   SB_PAGELEFT:   
      nCurPos   =   nPrevPos   -   10;   
      if(nCurPos   <   0)   
      nCurPos   =   0;   
      SetScrollPos(SB_VERT,   nCurPos);   
      break;   
      case   SB_PAGERIGHT:   
      nCurPos   =   nPrevPos   +   10;   
      if(nCurPos   >   100)   
      nCurPos   =   100;   
      SetScrollPos(SB_VERT,   nCurPos);   
      break;   
      case   SB_THUMBPOSITION:   
      SetScrollPos(SB_VERT,   nPos);   
      break;   
      case   SB_THUMBTRACK:   
      break;   
      case   SB_LINELEFT:   
      nCurPos   =   nPrevPos   -   2;   
      if(nCurPos   <   0)   
      nCurPos   =   0;   
      SetScrollPos(SB_VERT,   nCurPos);   
      break;   
      case   SB_LINERIGHT:   
      nCurPos   =   nPrevPos   +   2;   
      if(nCurPos   >   100)   
      nCurPos   =   100;   
      SetScrollPos(SB_VERT,   nCurPos);   
      break;   
      case   SB_ENDSCROLL:   
      break;   
      }   
      nCurPos   =   GetScrollPos(SB_VERT);   
      ScrollWindow(0,   rect.Height()   *   (nPrevPos   -   nCurPos)   /   100);   
        
      CDialog::OnVScroll(nSBCode,   nPos,   pScrollBar);   
      }   已经解决,在对话框的属性中有水平/垂直 滚动条选项,选True就行,只是我用添加的处理方法
    void CShowBitmap::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    中的 pScrollBar时除问题了,因为我想先获取当前滑块位置
    pScrollBar->GetScrollPos();
    就这里除问题了,现在解决了,
    还是十分感谢