为对话框设置水平,垂直条及鼠标移动滚动

原创 2012年03月29日 12:06:05

为对话框设置水平,垂直条及鼠标移动滚动

1.       创建一个对话框,设置属性如下:

2.       添加对话框的WM_HSCROLL消息,在触发水平滚动消息时,根据触发消息(如单击左右滚动箭头、拖到滚动块、单击滚动区域等)不同,设置相应的滚动位置。

 

void CImagePanel::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

       int nCurpos,nMin,nMax,nThumbWidth;    

       SCROLLINFO siInfo;                                                     //定义滚动条信息

       GetScrollInfo(SB_HORZ,&siInfo);                                  //获取滚动条信息

       nCurpos = siInfo.nPos;                                            //获取当前位置

       nMin = siInfo.nMin;                                                       //获取最小值

       nMax = siInfo.nMax;                                                      //获取最大滚动位置

       nThumbWidth = siInfo.nPage;                                         //获取滚动快大小

       switch (nSBCode)

       {

       break;

       case SB_THUMBTRACK: //拖动滚动块

              ScrollWindow(-(nPos-nCurpos),0);                    //滚动窗口

              SetScrollPos(SB_HORZ,nPos);                                 //设置水平滚动条的滚动位置

       break;

       case SB_LINELEFT : //单击左箭头

              SetScrollPos(SB_HORZ,nCurpos-1);                  //设置水平滚动条的滚动位置

              if (nCurpos != 0)

                     ScrollWindow(1,0);                                          //向左滚动一个位置

       break;

       case SB_LINERIGHT: //单击右箭头

              SetScrollPos(SB_HORZ,nCurpos+1);                 //设置水平滚动条的滚动位置

              if (nCurpos+nThumbWidth < nMax)

                     ScrollWindow(-1,0);                                         //向右滚动一个位置

       break;

       case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击,增量为6

              SetScrollPos(SB_HORZ,nCurpos-6);

              if (nCurpos+nThumbWidth >0)

                     ScrollWindow(6,0);                                          //向左滚动6个单位

       break;

       case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击,增量为6

              SetScrollPos(SB_HORZ,nCurpos+6);                 //设置水平滚动条的滚动位置

              if (nCurpos+nThumbWidth <nMax)

                     ScrollWindow(-6,0);                                         //向右滚动6个单位

       break;

       case SB_LEFT:                                                              //滚动到最左边

              SetScrollPos(SB_HORZ,0);                               //设置滚动位置为0

              ScrollWindow(nCurpos,0);                                //设置窗口滚动位置

       break;

       }    

       CDialog::OnHScroll(nSBCode, nPos, pScrollBar);    

 

}

3.       添加对话框的WM_VSCROLL消息

void CImagePanel::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

       int nCurpos,nMin,nMax,nThumbWidth;

       SCROLLINFO siInfo;

       GetScrollInfo(SB_VERT,&siInfo);

       nCurpos = siInfo.nPos;

       nMin = siInfo.nMin;

       nMax = siInfo.nMax;

       nThumbWidth = siInfo.nPage;

       switch (nSBCode)

       {

       case SB_THUMBTRACK:

              nCurpos = GetScrollPos(SB_VERT);

              ScrollWindow(0,-(nPos-nCurpos));

              SetScrollPos(SB_VERT,nPos);    

       break;

 

       case SB_LINELEFT:

              nCurpos = GetScrollPos(SB_VERT);

              SetScrollPos(SB_VERT,nCurpos-1);

              if (nCurpos !=0)

                     ScrollWindow(0,1);

       break;

       case SB_LINERIGHT:

              nCurpos = GetScrollPos(SB_VERT);

              SetScrollPos(SB_VERT,nCurpos+1);

              if (nCurpos+nThumbWidth < nMax)

                     ScrollWindow(0,-1);     

       break;

       case SB_PAGELEFT: //在滚动块的上方空白滚动区域单击,增量为6

              SetScrollPos(SB_VERT,nCurpos-6);

              if (nCurpos+nThumbWidth >0)

                     ScrollWindow(0,6);

       break;

       case SB_PAGERIGHT: //在滚动块的下方空白滚动区域单击,增量为6

              SetScrollPos(SB_VERT,nCurpos+6);

              if (nCurpos+nThumbWidth < nMax)

                     ScrollWindow(0,-6);

       break;

       case SB_LEFT:     

              SetScrollPos(SB_VERT,0);

              ScrollWindow(0,nCurpos);

       break;

       }    

       CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

4.       添加对话框的WM_MOUSEWHEEL消息

//数量鼠标滚动时的时间,适当地滚动窗口

BOOL CImagePanel::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

{

       SCROLLINFO siInfo;                                       //定义滚动信息对象

       GetScrollInfo(SB_VERT,&siInfo);                     //获取滚动信息

       int nMin,nMax,nThumbWidth;                          

       nMin = siInfo.nMin;                                         //获取滚动最小值

       nMax = siInfo.nMax;

       nThumbWidth = siInfo.nPage;             //获取滚动块大小

       int nPos = GetScrollPos(SB_VERT);       //获取垂直滚动条的当前位置

       if (zDelta > 0)                                           //向上滚动

       {

              if (nPos == 0)

                     return TRUE;

              SetScrollPos(SB_VERT,nPos-6);        //设置滚动条位置

              ScrollWindow(0,6);                   //向上滚动窗口

       }

       else

       {

              if ((nPos+nThumbWidth >= nMax))

                     return TRUE;

              SetScrollPos(SB_VERT,nPos+6);

              ScrollWindow(0,-6);

       }

       return TRUE;//CDialog::OnMouseWheel(nFlags, zDelta, pt);

}

MFC---鼠标右键弹出菜单

首先 在资源编辑栏中 添加 菜单栏

Unicode字符串的MFC支持及其在Visual Studio中的设置

1. 问题及分析 最近在自己写的MFC程序时,编译总是碰到以下的类似的问题: error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' ...
  • cyxcw1
  • cyxcw1
  • 2014年01月04日 20:31
  • 5206

对话框水平垂直滚动条

  • 2010年12月22日 13:17
  • 36KB
  • 下载

HTML基础 form-textarea创建带有水平垂直滚动条的多行文本框并设置其大小

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、代码 ...

unity。。。完美简单解决靠鼠标在屏幕上的移动来控制相机水平,垂直旋转的c#脚本

花了一天时间琢磨这个,看网上的解决办法。。没几个彻底解决的。。。都是说什么方法复杂。。让我们自己去看视频教程。。!!!! 感觉跟没有回答一样。。。。自己也是很多方法都试了。。不是有这种问题,就是那种问...

设置水平、垂直滚动条自动滚动

在做一个小项目时遇到需要随着手势翻页的同时,上面导航栏也需要随着而滑动,这样就需要在手势事件中调用滚动条的水平滑动事件。 总体效果图如下: 滚动部分布局XML片段: ...

显示窗口的水平和垂直滚动条

显示窗口的水平和垂直滚动条     由于在外读书,上网都是在网吧,所以回答问题,通常都是三言二语,没有说清楚,不过这一篇可是在寝室的电脑上完成的,当然还有上次回答天水的那篇.我学VB的时候,根本没有...
  • kirawoo
  • kirawoo
  • 2014年09月09日 13:54
  • 3571
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为对话框设置水平,垂直条及鼠标移动滚动
举报原因:
原因补充:

(最多只允许输入30个字)