滑块控件的使用

新建一个对话框程序,添加一个Slider Control控件和静态文本控件如下:

滑块控件:IDC_SLIDER1,关联控件变量:m_slider

设置滑块控件属性来显示刻度,Auto Ticks:True;Tick Marks:True

静态文本控件:IDC_STATIC_VALUE,关联控件变量m_staticValue


在OnInitDialog()中初始化滑块控件:

m_slider.SetRange(1,50);  //设置范围
	m_slider.SetPos(2);   //设置初始位置
	CString str;
	str.Format("%d",m_slider.GetPos());
	m_staticValue.SetWindowText(str);
	m_slider.SetPageSize(3);   //设置在控件上单击时滑块移动步长
	m_slider.SetTicFreq(5);    //设置刻度间隔

添加消息响应NM_CUSTOMDRAW,以便用户在移动滑块时做出反应

void CMoveTestDlg::OnCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	str.Format("%d",m_slider.GetPos());   //获取滑块位置值
	m_staticValue.SetWindowTextA(str);
	*pResult = 0;
}


若想要通过键盘左右方向键控制滑块移动,则重写PreTranslateMessage虚函数

BOOL CMoveTestDlg::PreTranslateMessage(MSG* pMsg)
{
	if( pMsg->message == WM_KEYDOWN )  //如果有键按下
	{
		int nValue=m_slider.GetPos();
		CString str;
		//判断具体键
		switch( pMsg->wParam )
		{ 
		case VK_LEFT://按下左键
			nValue-=1;  //值减小1
			m_slider.SetPos(nValue); //移动滑块
			str.Format("%d",nValue);  
			m_staticValue.SetWindowTextA(str);  //设置静态文本
			break; 

		case VK_RIGHT://按下右键
			nValue+=1;  //值增大1
			m_slider.SetPos(nValue); //移动滑块
			str.Format("%d",nValue);  
			m_staticValue.SetWindowTextA(str);  //设置静态文本
			break;   
		default: 
			break; 
		}
	}

	return CDialogEx::PreTranslateMessage(pMsg);
}


你可能感兴趣的:(VC++)