2017-07-25 24 views
1

移动我有一个CSliderCtrl,我把它像这样:设置CSliderCtrl在10个单位间隔

m_sliderServerTimeout.SetRange(10, 600); 

我有一个事件处理程序:

void COtherSettingsEmailInfoPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER) 
    { 
     UpdateServerTimeoutDescription(); 
    } 

    CMFCPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar); 
} 

工作正常,但我想滑块以10个单位间隔移动。

怎么样?

更新

我尝试使用SetLineSizeSetPageSize但它们并不适用时滑块拖动到。

回答

1

只需使用所需的滑条指标即可。所以只需在数值范围内使用1/10。

m_sliderServerTimeout.SetRange(1, 60); 

最后,当您要使用数据时,只需按* 10缩放设定值。

+0

非常好!我明白你的逻辑。奇妙的作品。谢谢。 –

1

似乎没有Trackbar Control Message来处理这个问题。

一个选项是手动覆盖OnHScroll。注意SB_THUMBTRACK消息并将值保存为nPos。当调用SB_ENDSCROLL时,使用CSliderCtrl::SetPos将其设置为所需的值。示例:

void CMyDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar); 

    static int track = -1; 
    if(nSBCode == SB_THUMBTRACK) 
     track = nPos; 

    if(nSBCode == SB_ENDSCROLL && track >= 0) 
    { 
     m_sliderServerTimeout.SetPos(10 * int(track/10)); 
     track = -1; 
    } 
} 
+0

感谢您的回答。我已经接受了其他答案,但总的来说,实施起来很简单。但再次感谢。 –