将CSliderCtrl设置为以10个单位间隔移动

时间:2017-07-25 21:05:40

标签: mfc

我有一个CSliderCtrl,我按照这样设置:

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,但它们不适用于拖动滑块的时间。

2 个答案:

答案 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;
    }
}

答案 1 :(得分:1)

只需使用您想要的滑块指标即可。因此,只需在值的范围内使用1/10。

m_sliderServerTimeout.SetRange(1, 60);

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