更新时间: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();
,好了,我们看看结果:
在这里,你可能对代码有疑惑,我会写篇文章,专门讲讲代码原理。
相关资讯