MFC中滚动条slider和编辑框edit的联动

想在MFC中实现滚动条slider和编辑框edit的联动(改变滚动条,显示数字在编辑框),同时想要添加两个滚动条,分别控制亮度和对比度。参考了几个博客在VS2017中跑不出来。自己写了一个能运行的版本,供大家参考。这里没有给出改变对比度和亮度的函数,只是实现实现滚动条slider和编辑框edit的联动。
最终实现的效果
在这里插入图片描述

在这里插入图片描述

第一部分:滚动条和编辑框联动部分。
第一步 ,在资源试图界面找到Dialog,打开Dialog界面(这里用的是MFC基于对话框类型)
在这里插入图片描述

在工具箱中双击slider control,添加两个。然后同样的道理,添加两个edit control。

在这里插入图片描述
添加完如下图所示(前面我又自行添加了两个Static Text静态文本,修改成亮度和对比度,以此来标识,看起来更清晰)。

在这里插入图片描述
第二步,给滚动条(slider)添加两个变量。
一个是控件类型,另一个是值类型。下面就以其中一个滚动条为例。该控件的ID名称是IDC_SLIDER1,对应的是上图中的亮度对应的滚动条的ID。
【1】右击滚动条,选择添加变量。如下图,一般只需要修改三个地方。类别,名称,访问(一般是private),这里改成:类别:控件,访问:private,名称:m_slider.然后点击完成,这样就添加好了控件类型的变量。

在这里插入图片描述

【2】再来添加值类型的变量。同样的,右击同一个滚动条,选择添加变量,此处修改类别:值,访问:private,名称改为m_int。点击完成即可。
在这里插入图片描述

用同样的手法给另外一个滚动条添加两个变量。如下图所示。
【1】控件类型变量。控件ID为:IDC_SLIDER2,名称:m_slider2
在这里插入图片描述
【2】值类型变量。数值变量名称为m_int2

在这里插入图片描述

再来看一下整个界面

在这里插入图片描述

第三步,滚动条初始化。
打开类试图,找到下面

在这里插入图片描述
在初始化部分BOOL CMFCApplication1Dlg::OnInitDialog()底下,找到下面这个位置,在TODO后面添加如下代码:
在这里插入图片描述

// TODO: 在此添加额外的初始化代码

//滚动条1

 //设置滚动条滚动范围
 m_slider.SetRange(0, 100);
 //每十个单位画一个刻度
 m_slider.SetTicFreq(10);
 //设置初始位置
 int Start=80;
 m_slider.SetPos(Start);//滚动条初始位置
 SetDlgItemInt(IDC_EDIT1, Start);//设置编辑框的初始值
 
//滚动条2

 //设置滚动条滚动范围
 m_slider2.SetRange(0, 300);
 //每十个单位画一个刻度
 m_slider2.SetTicFreq(10);
 //设置初始位置
 int Start2 = 80;
 m_slider2.SetPos(Start2);
 SetDlgItemInt(IDC_EDIT2, Start2);//编辑框的初始值

第四步,给滚动条添加事件
右击整个对话框(不是某一个控件),选择类向导,选择消息,找到WM_HSCROLL,双击,之后点击确定。
在这里插入图片描述

然后弹出如下界面在这里插入图片描述

这里就是实现滚动条和编辑框联动的地方(改变滚动条,显示相应的值)需要注意的是,滚动条和按钮不一样,按钮可以添加很多的消息,而滚动条只有这么一个,因为它是在整个对话框页面设置的。那该怎么区分不同的滚动条呢?
方法是通过pSlider->GetDlgCtrlID()来和滚动条的ID来比较,区分是对不同的滚动条进行操作。
代码如下:

// TODO: 在此添加消息处理程序代码和/或调用默认值
if (pScrollBar != NULL)
{
	// 强制转换成CSliderCtrl
  	CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;
  	// 根据CSlider控件的ID 来判断是哪一个滚动条
  
	  if (pSlider->GetDlgCtrlID() == IDC_SLIDER1)//对第一个滚动条进行操作
	  {
		 //获取当前位置值,放在变量m_int中
		   m_int = m_slider.GetPos();
		   //内容设置到编辑框中,编辑框的ID是IDC_EDIT1
		   SetDlgItemInt(IDC_EDIT1, m_int);
		 //On_ContrastAndBright(m_int, m_int2);//用来调整图片亮度和对比度的函数
		   //imshow("src1", g_dstImage);// opencv用来显示图片
		  }
	  
	  if (pSlider->GetDlgCtrlID() == IDC_SLIDER2)//对第二个滚动条操作
	  {
		   //获取当前位置值,放在变量m_int2中
		   m_int2 = m_slider2.GetPos();
		   //内容设置到编辑框中,编辑框的ID是IDC_EDIT2
		   SetDlgItemInt(IDC_EDIT2, m_int2);
		   //On_ContrastAndBright(m_int, m_int2);//用来调整图片亮度和对比度的函数
		   //imshow("src1", g_dstImage);// opencv用来显示图片
		  }
}

最终的运行结果

在这里插入图片描述
总结:
1.安放控件
2.添加变量:控件类型和值类型。
3.初始化
4.添加事件。注意滚动条消息是对于整个页面的,对不同的滚动条的处理事件都写在这底下,区分的依据是对ID进行识别。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值