更新MFC';s CSliderCtrl 我正在研究C++ MFC项目,并在下面进行了讨论。我的表格上有一个CSliderCtrl,我称之为MFC_scKINECTANGLE。为了使其符合我的要求,使用了下一段代码: MFC_scKINECTANGLE = (CSliderCtrl * ) GetDlgItem(SC_kinectAngle); MFC_scKINECTANGLE->SetRangeMax(27); MFC_scKINECTANGLE->SetRangeMin(-27); MFC_scKINECTANGLE->SetPos(0); 问题是程序开始时的滑块在杆的顶部,而应该在中间,当你试图抓住它时,它突然跳到正确的位置,然后很好地工作。在MSDN( CsLoCdCtR::SetRangeMin < /代码>相似):中,如何确保滑块在程序开始的时候在杆的中间?< P>

更新MFC';s CSliderCtrl 我正在研究C++ MFC项目,并在下面进行了讨论。我的表格上有一个CSliderCtrl,我称之为MFC_scKINECTANGLE。为了使其符合我的要求,使用了下一段代码: MFC_scKINECTANGLE = (CSliderCtrl * ) GetDlgItem(SC_kinectAngle); MFC_scKINECTANGLE->SetRangeMax(27); MFC_scKINECTANGLE->SetRangeMin(-27); MFC_scKINECTANGLE->SetPos(0); 问题是程序开始时的滑块在杆的顶部,而应该在中间,当你试图抓住它时,它突然跳到正确的位置,然后很好地工作。在MSDN( CsLoCdCtR::SetRangeMin < /代码>相似):中,如何确保滑块在程序开始的时候在杆的中间?< P>,c++,mfc,slider,C++,Mfc,Slider,您需要将bRedraw参数设置为TRUE以更新滑块 另一个(可能更好)的变体-设置后强制重新绘制滑块 但由于MS trackbar实现中的错误(或功能?),您不能仅仅调用(延迟重画)甚至(立即重画)。这不会有任何效果 幸运的是,有几个事件会迫使轨迹栏重新绘制,例如启用/禁用窗口: const BOOL isEnabled = MFC_scKINECTANGLE->IsWindowEnabled(); MFC_scKINECTANGLE->EnableWindow(!isEnable

您需要将
bRedraw
参数设置为
TRUE
以更新滑块

另一个(可能更好)的变体-设置后强制重新绘制滑块

但由于MS trackbar实现中的错误(或功能?),您不能仅仅调用(延迟重画)甚至(立即重画)。这不会有任何效果

幸运的是,有几个事件会迫使轨迹栏重新绘制,例如启用/禁用窗口:

const BOOL isEnabled = MFC_scKINECTANGLE->IsWindowEnabled();

MFC_scKINECTANGLE->EnableWindow(!isEnabled);
MFC_scKINECTANGLE->EnableWindow(isEnabled);
有关详细信息,请参见。

根据MSDN(
CSliderCtrl::SetRangeMin
类似):

您需要将
bRedraw
参数设置为
TRUE
以更新滑块

另一个(可能更好)的变体-设置后强制重新绘制滑块

但由于MS trackbar实现中的错误(或功能?),您不能仅仅调用(延迟重画)甚至(立即重画)。这不会有任何效果

幸运的是,有几个事件会迫使轨迹栏重新绘制,例如启用/禁用窗口:

const BOOL isEnabled = MFC_scKINECTANGLE->IsWindowEnabled();

MFC_scKINECTANGLE->EnableWindow(!isEnabled);
MFC_scKINECTANGLE->EnableWindow(isEnabled);
有关详细信息,请参阅。

我正在对话框的构造函数中设置范围(0-100)和位置(50)。滑块最初一直显示在位置0处。如果我在SetPos()之后调用GetPos(),它将返回0而不是50

使它对我起作用的是重写OnInitDialog()并在那里而不是在构造函数中设置范围和位置

BOOL CVolumeDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    m_VSliderBarNormal.SetRange(0, 100, TRUE);
    m_VSliderBarNormal.SetPos(50);

    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}
我在对话框的构造函数中设置范围(0-100)和位置(50)。滑块最初一直显示在位置0处。如果我在SetPos()之后调用GetPos(),它将返回0而不是50

使它对我起作用的是重写OnInitDialog()并在那里而不是在构造函数中设置范围和位置

BOOL CVolumeDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    m_VSliderBarNormal.SetRange(0, 100, TRUE);
    m_VSliderBarNormal.SetPos(50);

    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

出于某种原因,MFC_scKINECTANGLE->RedrawWindow();不起作用。但是:MFC_scKINECTANGLE->SetPos(0);MFC_scKINECTANGLE->SetRangeMax(27);MFC_scKINECTANGLE->SetRangeMin(-27,真);确实有效。所以我很好奇为什么RedrawWindow()不起作用;不起作用。但是:MFC_scKINECTANGLE->SetPos(0);MFC_scKINECTANGLE->SetRangeMax(27);MFC_scKINECTANGLE->SetRangeMin(-27,真);确实有效。所以我很好奇为什么RedrawWindow()不起作用?
我在对话框的构造函数中设置了范围(0-100)和位置(50)。
-我只是想知道你的代码是如何运行的。Magic valid HWND或高度定制的构造函数和对话框类?标准MFC对话框和滑块类:CDialogEx和CSliderCtrl。唯一的神奇之处是VC++2015类向导创建派生类。我想这就是为什么他们叫它巫师。此处的说明:
我在对话框的构造函数中设置了范围(0-100)和位置(50)。
-我只是想知道您的代码是如何运行的。Magic valid HWND或高度定制的构造函数和对话框类?标准MFC对话框和滑块类:CDialogEx和CSliderCtrl。唯一的神奇之处是VC++2015类向导创建派生类。我想这就是为什么他们叫它巫师。此处的说明: