[MFC] 对话框自带滚动条的使用

简介: [MFC] 对话框自带滚动条的使用

 最近在整理一个别人的MFC程序的时候,发现对话框太大了,屏幕显示不下,最后决定加一个对话框自带的滚动条,以垂直滑动条为例,具体操作如下:

1.添加垂直滑动条:右键对话框——>属性,将Vertical Scrollbar状态改为True。

                                 

2.添加响应函数:右键对话框——>添加类向导

3.在OnInitDialog()函数中添加

SCROLLINFO scrollinfo;
  GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
  scrollinfo.nPage=10; //设置滑块大小
  scrollinfo.nMax=100; //设置滚动条的最大位置0–100
  SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);

4 .在OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)消息处理函数中添加:

void CChangeonDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)   //对话框的滚动效果
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    SCROLLINFO scrollinfo;
    GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    int unit=3;        
     switch (nSBCode)  
     {      
     case SB_LINEUP:          //Scroll one line up
         scrollinfo.nPos -= 1;  
         if (scrollinfo.nPos<scrollinfo.nMin)
         {  
             scrollinfo.nPos = scrollinfo.nMin;  
             break;  
         }  
         SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
         ScrollWindow(0,unit); 
         break;  
     case SB_LINEDOWN:           //Scroll one line down
         scrollinfo.nPos += 1;  
         if (scrollinfo.nPos+scrollinfo.nPage>scrollinfo.nMax)  //此处一定要注意加上滑块的长度,再作判断
         {  
             scrollinfo.nPos = scrollinfo.nMax;  
             break;  
         }  
         SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
         ScrollWindow(0,-unit);  
         break;  
     case SB_PAGEUP:            //Scroll one page up.
         scrollinfo.nPos -= 5;  
         if (scrollinfo.nPos<=scrollinfo.nMin)
         {  
             scrollinfo.nPos = scrollinfo.nMin;  
             break;  
         }  
         SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
         ScrollWindow(0,unit*5);  
         break;  
     case SB_PAGEDOWN:        //Scroll one page down        
         scrollinfo.nPos += 5;  
         if (scrollinfo.nPos+scrollinfo.nPage>=scrollinfo.nMax)  //此处一定要注意加上滑块的长度,再作判断
         {  
             scrollinfo.nPos = scrollinfo.nMax;  
             break;  
         }  
         SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
         ScrollWindow(0,-unit*5);  
         break;  
     case SB_ENDSCROLL:      //End scroll     
         break;  
     case SB_THUMBPOSITION:  //Scroll to the absolute position. The current position is provided in nPos
         break;  
     case SB_THUMBTRACK:                  //Drag scroll box to specified position. The current position is provided in nPos
         ScrollWindow(0,(scrollinfo.nPos-nPos)*unit);  
         scrollinfo.nPos = nPos;  
         SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
         break;  
     }
    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

5 .效果展示:

 


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。
目录
相关文章
14 MFC - 普通按钮 CButton
14 MFC - 普通按钮 CButton
44 0
|
6月前
|
索引
MFC工具栏和状态栏
MFC工具栏和状态栏
61 1
|
6月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
16 MFC - 组合框(下拉框) CComboBox
16 MFC - 组合框(下拉框) CComboBox
45 0
|
C++
基于MFC实现选项卡控件练习
基于MFC实现选项卡控件练习
72 0
基于MFC实现选项卡控件练习
MFC更改窗口/对话框的背景颜色
MFC更改窗口/对话框的背景颜色
197 0
MFC更改窗口/对话框的背景颜色
MFC窗口右下角弹窗
MFC窗口右下角弹窗
113 0
MFC修改窗口背景颜色
MFC修改窗口背景颜色
276 0
MFC中如何给子对话框添加图标
MFC中如何给子对话框添加图标
401 0
在MFC对话框中添加状态栏
如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图)。 1. 首先,打开在资源视图的String Table并添加两个ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下图 2.
1176 0