1.如何控制slider:
应用程序可以调用滑块控件 (Slider Control) 的成员函数来检索有关滑块控件 (Slider Control) (CSliderCtrl) 的信息并更改它的特征。
若要检索滑块的位置(即,用户已选择的值),请使用(GetPos 成员函数。若要设置滑块的位置,请使用 SetPos 成员函数。在任何时候都可以用 VerifyPos 成员函数来确保滑块位于最小值和最大值之间。
滑块控件 (Slider Control) 的范围为滑块控件 (Slider Control) 能够表示的连续数值集。第一次创建滑块控件 (Slider Control) 后,大多数应用程序用 SetRange 成员函数设置滑块控件 (Slider Control) 的范围。在用 SetRangeMax 和 SetRangeMin 成员函数创建滑块控件 (Slider Control) 后,应用程序可以动态改变滑块控件 (Slider Control) 的范围。允许动态更改范围的应用程序一般在用户处理完滑块控件 (Slider Control) 后检索最后的范围设置。若要检索这些设置,请使用 GetRange、GetRangeMax 和 GetRangeMin 成员函数。
m_SliderA.SetRange(0, 255);
m_SliderB.SetRange(0,255);
m_nPosA = 120;
m_nPosB=255;
UpdateData(FALSE);
2 如何用响应slider的改变:
滑块控件 (Slider Control) 通过向父窗口发送 WM_HSCROLL 或 WM_VSCROLL 消息(取决于滑块控件 (Slider Control) 的方向),将用户操作通知其父窗口。若要处理这些消息,请将 WM_HSCROLL 和 WM_VSCROLL 消息的处理程序添加到父窗口。将向 OnHScroll 和 OnVScroll 成员函数传递通知代码、滑块的位置和指向 CSliderCtrl 对象的指针。注意指针的类型为 CScrollBar *,即使它指向 CSliderCtrl 对象。若要操作滑块控件 (Slider Control),可能需要转换该指针的类型。
滑块控件 (Slider Control) 不是使用滚动条通知代码,而是发送不同的通知代码集。只有当用户使用键盘与滑块控件 (Slider Control) 交互时,滑块控件 (Slider Control) 才发送 TB_BOTTOM、TB_LINEDOWN、TB_LINEUP 和 TB_TOP 通知代码。只有当用户使用鼠标时才发送 TB_THUMBPOSITION 和 TB_THUMBTRACK 通知消息。在两种情况下都发送 TB_ENDTRACK、TB_PAGEDOWN 和 TB_PAGEUP 通知代码。
下表列出了滑块控件 (Slider Control) 通知消息和导致发送通知的事件(虚键控代码和鼠标事件)。(有关标准虚键控代码的列表,请参见 Winuser.h。)
通知消息 | 导致发送通知的事件 |
---|---|
TB_BOTTOM | VK_END |
TB_ENDTRACK | WM_KEYUP(用户释放了发送相关虚键控代码的键) |
TB_LINEDOWN | VK_RIGHT 或 VK_DOWN |
TB_LINEUP | VK_LEFT 或 VK_UP |
TB_PAGEDOWN | VK_NEXT(用户单击了滑块下面或右边的通道) |
TB_PAGEUP | VK_PRIOR(用户单击了滑块上面或左边的通道) |
TB_THUMBPOSITION | WM_LBUTTONUP 在 TB_THUMBTRACK 通知消息之后 |
TB_THUMBTRACK | 滑块移动(用户拖动了滑块) |
TB_TOP | VK_HOME |
void CThresholdDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
UpdateData(TRUE);
if (pScrollBar == GetDlgItem(IDC_SLIDERA)) //获取slider的指针;
m_nA = m_nPosA; //改变编辑框A的数值;
else
m_nB = m_nPosB; //改变编辑框B的数值;
//refresh();
UpdateData(FALSE);
refresh();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}