首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置CSliderCtrl以10个单位间隔移动

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

Stack Overflow用户
提问于 2017-07-25 21:05:39
回答 2查看 497关注 0票数 1

我有一个CSliderCtrl,我把它设置如下:

代码语言:javascript
复制
m_sliderServerTimeout.SetRange(10, 600);

我有一个事件处理程序:

代码语言:javascript
复制
void COtherSettingsEmailInfoPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER)
    {
        UpdateServerTimeoutDescription();
    }

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

工作良好,但我希望滑块移动在10个单位间隔。

多么?

更新

我试过使用SetLineSizeSetPageSize,但它们不适用于拖拽滑块时。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-26 06:47:27

只需使用你想要的滑块度量。所以,只需在数值范围内使用1/10。

代码语言:javascript
复制
m_sliderServerTimeout.SetRange(1, 60);

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

票数 2
EN

Stack Overflow用户

发布于 2017-07-25 22:18:23

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

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45313448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档