【无标题】MFC添加垂直滚动条

VS2019实现MFC对话框添加垂直滚动条

给MFC的对话框添加一个垂直滚动条
参考了[MFC] 对话框自带滚动条的使用

一、对话框属性

右键对话框,找到属性,将垂直滚动条的状态改为true
在这里插入图片描述

二、通过类向导添加响应函数

右键对话框,选择类向导,选择消息,选择WM_VSCROLL(垂直滚动条),双击WM_VSCROLL选择OnVScroll函数点击确定。
在这里插入图片描述

三、添加OnInitDialog()函数

添加一个对话框函数OnInitDialog()并设置滚动条和滑块的参数
在这里插入图片描述
右键对话框,选择属性,选择重写,下拉找到OnInitDialog函数,在这里插入图片描述
选择添加代码

BOOL FeatureDistributionDialog::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	SCROLLINFO scrollinfo;
	GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
	scrollinfo.nPage = 10; //设置滑块大小
	scrollinfo.nMax = 100; //设置滚动条的最大位置0–100
	SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
	
	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}

再回到上一步的OnVScroll函数

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);
}

四完成垂直滚动条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值