我想在对话框里面添加一个滚动条但是滚动条有了,而且能动。但是拖动滚动条的时候对话框里面的内容没有跟着懂,等滚动条拉到最底下的时候依然现实对话框最顶头的内容求大侠解释。最好能附上代码。
BOOL CsliderDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
m_progress.SetRange(0,16);
m_progress.SetStep(1);
m_progress.SetPos(1);
m_slider.SetRange(0,16,FALSE);
m_slider.SetTicFreq(1);
CScrollBar* pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
pScrollBar->SetScrollRange(0,100);//滑块移动的位置为0——100;
pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
pScrollBar->SetScrollRange(0,100);
pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
 pScrollBar->SetScrollRange(0,100);
return TRUE;  // 除非将焦点设; 置到控件,否则返回 TRUE
}void CsliderDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
 int TempPos = pScrollBar->GetScrollPos();
 switch(nSBCode)
 {
 case SB_THUMBPOSITION://拖动滑块
  pScrollBar->SetScrollPos(nPos);
  break;
 case SB_LINELEFT://点击左边的箭头
  if(TempPos > 1)
  {
   TempPos--;
  }
  pScrollBar->SetScrollPos(TempPos);
  break;
 case SB_LINERIGHT://点击右边的箭头
  if(TempPos<100)
  {
   TempPos++;
  }
  pScrollBar->SetScrollPos(TempPos);
  break;
 } 
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
以上是我的代码求解释

解决方案 »

  1.   

    窗口自己带滚动条,你打开对话框的属性就可以发现。
    对话框初始化时:
    // TODO: Set the Scrollbar information
    CRect rc;
    GetClientRect(&rc);
    SCROLLINFO ScrollInfo;
    GetScrollInfo(SB_HORZ,&ScrollInfo);
    //
    ScrollInfo.cbSize=sizeof(ScrollInfo);
    ScrollInfo.nPos =0;// at middle
    ScrollInfo.nMax=rc.Width()/2;
    ScrollInfo.nMin=-rc.Width()/2;
    ScrollInfo.fMask=SIF_ALL;
    SetScrollInfo(SB_HORZ,&ScrollInfo);
    // 不需要自己滚动。
      

  2.   

    CScrollBar* pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
    pScrollBar->SetScrollRange(0,100);//滑块移动的位置为0——100;
    pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
    pScrollBar->SetScrollRange(0,100);
    pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
    pScrollBar->SetScrollRange(0,100);
    几个滚动条?
      

  3.   

    如:
    void CClipDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    SCROLLINFO ScrollInfo;
    ScrollInfo.cbSize=sizeof(ScrollInfo);
    ScrollInfo.fMask = SIF_ALL;
    GetScrollInfo(SB_HORZ,&ScrollInfo);
    //
    int delta=0;
    switch(nSBCode)
    {
    case SB_LEFT:
    case SB_LINELEFT:
    if(ScrollInfo.nPos  > ScrollInfo.nMin) delta = -SCROLL_STEP;
    break;
    case SB_RIGHT:
    case SB_LINERIGHT:
    if(ScrollInfo.nPos  < ScrollInfo.nMax) delta = SCROLL_STEP;
    break;
    case SB_THUMBTRACK:
    case SB_THUMBPOSITION:
            delta = ScrollInfo.nTrackPos-ScrollInfo.nPos;
    break;
    }
    if(delta !=0 )
    {// you can adjust m_Offset in OnInitDialog() for "abc" start point
    m_Offset += delta;
    //afxDump << m_Offset << "=\n";
    ScrollWindow(delta,0);
    UpdateWindow();
    ScrollInfo.nPos += delta;
    ScrollInfo.fMask=SIF_POS | SIF_RANGE;
    SetScrollInfo(SB_HORZ,&ScrollInfo);
    }
    // CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
      

  4.   

    在消息处理函数中,巧用ScrollWindow