MFC界面编程基础(14):滚动条

上一篇:MFC界面编程基础(13):列表框和组合框下一篇:MFC界面编程基础(15):程序举例+屏蔽或接收键盘事件

滚动条是 CScrollBar 类的对象,是 Windows 应用程序中一个很重要的控件,通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。滚动条有水平和垂直两种。
在这里插入图片描述

【例】

建立一个水平滚动条,最小值为 0 ,最大值为 100 ,单击滚动条两端箭头时滑块移动的增量值为 2 ,单击滚动条中的空白处(滑块与两端箭头之间的区域)时滑块移动的增量值为 10 。另有一个只读的编辑框,显示了滑块当前位置所代表的值。
假定工程名为 TEST 。

  • 界面设计
    首先创建一个对话框应用程序框架,然后放置水平滚动条、编辑框,按表连接变量,编辑框设置为只读。
    在这里插入图片描述

  • 初始化
    滚动条的初始化就是设置最小值,最大值,以及初始时滑块所代表的值。滚动条初始化在对话框的初始化函数中完成,涉及两个函数:

  • 设置最大值和最小值
    函数原型:

void SetScrollRange(int nMinPos , int nMaxPos , BOOL bRedraw = TRUE);

参数说明:
①:nMinPos 表示最小值
②:nMinPos 表示最大值 。
③:当 bRedraw 为 TRUE 时重画滚动条。

  • 设置滑块的位置
    格式:
int SetScrollPos( int nPos , BOOL bRedraw = TRUE );

参数说明 :
①:nPos 表示滑块的位置。
②:当 bRedraw 为 TRUE 时重画滚动条。
滚动条初始化代码如下:

BOOL CTESTDlg::OnInitDialog() 
{ 
  ┆ 
 // TODO: Add extra initialization here 
 m_s.SetScrollRange(0,100); 
 m_s.SetScrollPos(50); 
 m_e=50; // 初始时,编辑框显示 50 。 
 UpdateData(FALSE); // 更新编辑框显示的内容。 
  ┆ 
};  
  • 编写消息处理函数
    当用户在滚动条上进行操作时,滚动条接收不到任何消息。但是对话框却能接收到 WM_HSCROLL (水平滚动条)或 WM_VSCROLL (垂直滚动条)消息,也就是说,程序对滚动条的操作只能在 OnHScroll() 或 OnVScroll() 中编写代码。
    滚动条处理 WM_Hscroll 消息的函数为:
void CTESTDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
   // TODO: Add your message handler code here and/or call default 
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar); 
} 

在对话框的属性面板中查找WM_HSCROLL命令,并添加响应函数
在这里插入图片描述
做如图选择,点击“”就把OnHScroll函数添加进去。
响应函数参数说明 :
① pScrollBar 指向用户正在进行操作的滚动条。
② nPos 表示滑块当前的位置。
③ nSBCode 指示用户正在进行的操作,其取值及其意义见表。
在这里插入图片描述
程序代码:

…………………………………………………………
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{	// TODO: Add your message handler code here and/or call default
	if (pScrollBar==&m_s) 
	{ 
		int iNowPos; 
      switch(nSBCode) 
	  { 
		case SB_THUMBTRACK: // 拖动滚动滑块时 
             m_s.SetScrollPos(nPos); 
             m_e=nPos; 
              break; 
	   case SB_LINELEFT : // 单击滚动条向左的箭头 
		    iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 
		    iNowPos=iNowPos-2; 
		    if(iNowPos<0) 
			   iNowPos=0; 
			m_s.SetScrollPos(iNowPos); 
			m_e=iNowPos; 
			break; 
		case SB_LINERIGHT : // 单击滚动条向右的箭头 
			iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 
			iNowPos=iNowPos+2; 
			if(iNowPos>100) 
				iNowPos=100; 
			m_s.SetScrollPos(iNowPos); 
			m_e=iNowPos; 
			break; 
		case SB_PAGELEFT : // 单击滚动条左边的箭头与滑块之间的区域 
			iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 
			iNowPos=iNowPos-10; 
			if(iNowPos<0) 
				iNowPos=0;
			m_s.SetScrollPos(iNowPos); 
			m_e=iNowPos; 
			break; 
		case SB_PAGERIGHT : // 单击滚动条右边的箭头与滑块之间的区域 
			iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 
			iNowPos=iNowPos+10; 
			if(iNowPos>100) 
				iNowPos=100; 
			m_s.SetScrollPos(iNowPos); 
			m_e=iNowPos; 
			break; 
		 } 
	}
	UpdateData(FALSE); 
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
 }
…………………………………………………………

说明:

  • 由于对话框上可能有多个滚动条,因此函数首先需要根据指针 pScrollBar 确定事件发生在哪一个滚动条上,方法是使用表达式 pScrollBar==&m_s。因为, pScrollBar 指向发生事件的滚动条,所以这个表达式为真时,意味着用户对滚动条 m_s 进行了操作。
  • 用户对滚动条的操作有 5 种,因此函数中必须以这 5 种情况分别进行处理。
上一篇:MFC界面编程基础(13):列表框和组合框下一篇:MFC界面编程基础(15):程序举例+屏蔽或接收键盘事件
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值