当前位置:C++技术网 > 资讯 > 使用滑块控件设置颜色

使用滑块控件设置颜色

更新时间:2015-10-28 22:35:39浏览次数:1+次

与进度条控件类似,滑块控件也能够用来描述某一个动作的进度信息,此外,还允许用户设置滑块控件表示的进度。依据此特点,滑块控件在设计应用程序时有其他的用途,例如来显示歌曲的播放进度,这样即可允许用户通过滑块控件来设置歌曲的播放进度。

在VC6编译器的控件选择中,我们选择滑块控件:

在滑块控件的属性列表里,我们可以设置滑块控件的位置,水平或垂直等其他的属性,在这里,我们做个小程序来熟悉掌握滑块控件。

首先,我们创建VC的基于对话框的工程,命名为Slider。接着我们在对话框中饭删除掉原有的控件,添上我们需要的控件,如图:

三种控件类型分别是图片控件,编辑框,滑块控件。依次将其ID号改为IDC_DEMOAREA,编辑框控件是显示颜色值的,ID号分别为IDC_rValue,IDC_gValue,IDC_bValue,滑块控件则是用来调整颜色进度,ID号分别为IDC_RSLIDER,IDC_GSLIDER,IDC_BSLIDER,然后分别关联变量:

        CStatic	m_Area;
	CSliderCtrl	m_rSlider;
	CSliderCtrl	m_gSlider;
	CSliderCtrl	m_bSlider;
	UINT	m_bValue;
	UINT	m_gValue;
	UINT	m_rValue;
最后我们再加上颜色变量:


COLORREF m_clColor;
接着,我们添加一个消息响应函数用来更新我们的图片控件区域,因为我们需要将颜色显示到这个图片区域中:


void CSliderDlg::UpdateArea()
{
	CDC* pDC = m_Area.GetDC();
	CRect clientRC;
	m_Area.GetClientRect(clientRC);
	pDC->FillRect(clientRC, &CBrush(m_clColor));
	m_Area.ReleaseDC(pDC);
}
我们需要显示颜色的值,这也是我们的编辑框的作用,将我们的颜色值给显示出来,因此,我们建立个消息响应,这个消息响应是VC编译器自己有的,你可以用类向导创建,而上面的是我们自己定义的消息函数,不能用类向导创建!接着我们看编辑框的消息响应函数代码:


void CSliderDlg::OnChangeRvalue() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_rSlider.SetPos(m_rValue);
	UpdateArea();
}
这是第一个编辑框的消息响应,接着的两个编辑框函数一样,你只需要改下每个编辑框对应的变量就行。


最后就是重头戏了!

我们添加一个滑块控件自己的消息句柄--WM_HSCOLL句柄函数:

if (nSBCode == SB_THUMBTRACK)
	{
		if (pScrollBar->m_hWnd == m_rSlider.m_hWnd)
		{
			m_rValue = nPos;
			UpdateData(FALSE);
		}
		if (pScrollBar->m_hWnd == m_gSlider.m_hWnd)
		{
			m_gValue = nPos;
			UpdateData(FALSE);
		}
		if (pScrollBar->m_hWnd == m_bSlider.m_hWnd)
		{
			m_bValue = nPos;
			UpdateData(FALSE);
		}
	}
	m_clColor = RGB(m_rValue, m_gValue, m_bValue);
	
	UpdateArea();
最后我们在OnPaint函数中添加一句代码:


UpdateArea();
,好了,我们看看结果:



在这里,你可能对代码有疑惑,我会写篇文章,专门讲讲代码原理。