CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在对话框上实现滚动条的拖动??

楼主jackadandy(锋行天下)2005-11-16 10:24:03 在 VC/MFC / 基础类 提问

我在对话框上设置了一个滚动条控件,对他设置了一个消息处理函数,但没有办法直接用cscrollbar::onhscroll(),怎么写才能实现滚动条的拖动那?  
  void   CTest2Dlg::OnHScroll(   UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar   )  
  {  
  m_scroll.OnHScroll(   nSBCode,     nPos,   pScrollBar   );//不能用  
  } 问题点数:20、回复次数:3Top

1 楼jjkka(天涯草)回复于 2005-11-24 14:34:32 得分 5

靠,你的那些参数都没设置怎么用啊?Top

2 楼tianpuf()回复于 2005-12-20 21:28:34 得分 10

void   CDdDlg::OnVScroll(UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
   
  CDialog::SetScrollRange(SB_VERT,0,330,true);    
  CDialog::GetScrollRange(SB_VERT,&minpos,   &maxpos);    
  //maxpos   =   CDialog::GetScrollLimit(SB_VERT);  
  static   int   curpos   =   CDialog::GetScrollPos(SB_VERT);  
  //curaddlian=&curpos;  
  SCROLLINFO     info;  
   
   
  switch   (nSBCode)  
  {  
  case   SB_TOP:         //   Scroll   to   far   left.  
   
  //curpos   =   minpos;  
   
  CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  break;  
   
  case   SB_BOTTOM:         //   Scroll   to   far   right.  
  curpos   =   maxpos;  
   
  CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  break;  
   
  case   SB_ENDSCROLL:     //   End   scroll.  
  break;  
   
  case   SB_LINEUP:         //   Scroll   left.  
  if   (curpos   >   minpos)  
  {  
  curpos-=10;  
   
  CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  break;  
   
  case   SB_LINEDOWN:     //   Scroll   right.  
  //if(maxpos==101){AfxMessageBox(_T("i   am   here"));}  
  if   (curpos   <   maxpos)  
  {  
  curpos+=10;  
  //AfxMessageBox(_T("ok   here"));  
   
  CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  //AfxMessageBox(_T("linedown"));  
  break;  
   
  case   SB_PAGEUP:       //   Scroll   one   page   left.  
  //   Get   the   page   size.    
   
  //pScrollBar->GetScrollInfo(&info,   SIF_ALL);  
  CDialog::GetScrollInfo(SB_VERT,&info,   SIF_ALL);  
       
  if   (curpos   >   minpos)  
  {  
  //curpos   =   max(minpos,   curpos   -   (int)   info.nPage);  
  curpos   =   max(minpos,   curpos   -   10);  
   
  CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  break;  
   
  case   SB_PAGEDOWN:         //   Scroll   one   page   right.  
  //pScrollBar->GetScrollInfo(&info,   SIF_ALL);  
  CDialog::GetScrollInfo(SB_VERT,&info,   SIF_ALL);  
           
  if   (curpos   <   maxpos)  
  {  
  curpos   =   min(maxpos,   curpos   +   (int)   info.nPage);  
   
  curpos   =   min(maxpos,   curpos   +   10);  
  CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  break;  
   
  case   SB_THUMBPOSITION:   //   Scroll   to   absolute   position.   nPos   is   the   position  
  postmp1=nPos;  
  if(curpos<postmp1)  
  {  
   
  curpos   =   nPos;             //   of   the   scroll   box   at   the   end   of   the   drag    
  //   operation.  
   
  CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  if(curpos>postmp1)  
  {  
   
    curpos   =   nPos;             //   of   the   scroll   box   at   the   end   of   the   drag    
  //   operation.  
   
  CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  }  
  break;  
   
  case   SB_THUMBTRACK:       //   Drag   scroll   box   to   specified   position.   nPos   is    
  int   postmp2=curpos;  
  curpos   =   nPos;           //   position   that   the   scroll   box   has   been   dragged    
      //   to.  
   
  CDialog::ScrollWindowEx(0,postmp2-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);  
  CDialog::UpdateWindow();  
  CDialog::SetScrollPos(SB_VERT,curpos,true);  
  break;  
  }  
   
  UpdateData(FALSE);  
  Invalidate();  
  CDialog::OnVScroll(nSBCode,   nPos,   pScrollBar);  
   
   
  }  
  虽然我还没有彻底明白这些代码的用处,但它真的能用。  
  或许有些是多余的,但总比什么都没有强。Top

3 楼vans322(小范)回复于 2005-12-21 17:25:05 得分 5

楼上的强Top

相关问题

  • 怎样实现对话框的滚动?
  • 如何在对话框程序中实现按钮的拖动?
  • 在对话框中实现滚动条的功能
  • 一对话框,没有设计标题栏,如何实现拖动对话框使之移动?
  • 怎么实现主对话框拖动,其他的对话框也跟着动?就象Winamp那样!
  • 怎么实现用鼠标拖动去掉标题栏的对话框?
  • vc++60中怎么实现窗口拖动(无标题栏的对话框)?
  • 请教一个简单的问题:怎么实现对话框的拖动?
  • 求助,怎么在没有Title bar的对话框上实现拖动?
  • 如何在对话框的一个矩形框内实现滚动文字!

关键词

  • curpos
  • cdialog
  • vert
  • scrollchildren
  • sb
  • setscrollpos
  • npos
  • minpos
  • scrollwindowex
  • maxpos

得分解答快速导航

  • 帖主:jackadandy
  • jjkka
  • tianpuf
  • vans322

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo