Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得滑块可以移动的最大速率(频率)? 我想确定一个滑动条可以在基于MFC的Visual C++程序中使用的速度(频率)(使用Visual Studio 2012)。那么,如何通过编程获得适当的轮询率呢_C++_Windows_Visual Studio 2012_Mfc - Fatal编程技术网

如何获得滑块可以移动的最大速率(频率)? 我想确定一个滑动条可以在基于MFC的Visual C++程序中使用的速度(频率)(使用Visual Studio 2012)。那么,如何通过编程获得适当的轮询率呢

如何获得滑块可以移动的最大速率(频率)? 我想确定一个滑动条可以在基于MFC的Visual C++程序中使用的速度(频率)(使用Visual Studio 2012)。那么,如何通过编程获得适当的轮询率呢,c++,windows,visual-studio-2012,mfc,C++,Windows,Visual Studio 2012,Mfc,以下是我用于捕获滑块值的代码: void CMainDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) // catches slider horizontal scrolling events { double val; ScopeGuardMutex guard(&m_mutex); val = (double)(((CSliderCtrl *)pScrollBar)->GetP

以下是我用于捕获滑块值的代码:

void CMainDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
// catches slider horizontal scrolling events
{
    double val;
    ScopeGuardMutex guard(&m_mutex);
    val = (double)(((CSliderCtrl *)pScrollBar)->GetPos()) / (double)SLD_MAX;
    rec->param = val;
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

如果无法通过编程确定该值,则是否存在近似值,例如100Hz?

无需轮询滑块。Windows GUI在设计上是基于事件的

只需按照滑块通知消息中所述处理
OnHScroll()
OnVScroll()
消息即可。当用户移动滑块并释放鼠标按钮时,将发送
TB_THUMBPOSITION
通知(
nSBCode
滚动处理程序的参数)。位置在
nPos
参数中传递,并在
pScrollBar
参数中指向滑块控制的指针(必须转换为
CSliderCtrl*

添加
WM\HSCROLL
处理程序,如下所示:

void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if (IDC_SLIDER == pScrollBar->GetDlgCtrlID())
    {
        // When there is no member variable and we need to access the control
        CSliderCtrl* pSlider = reinterpret_cast<CSliderCtrl*>(pScrollBar);
        // Handle event here
        switch (nSBCode)
        {
            case TB_LINEUP:
            case TB_LINEDOWN:
            case TB_PAGEUP:
            case TB_PAGEDOWN:
            case TB_THUMBPOSITION:
            case TB_TOP:
            case TB_BOTTOM:
            case TB_THUMBTRACK:
            case TB_ENDTRACK:
            default:
                break;
        }
        return;
    }
    // Default handling if not a slider control.
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CMyDlg::OnHScroll(UINT nSBCode、UINT npo、CScrollBar*pScrollBar)
{
如果(IDC_滑块==pScrollBar->GetDlgCtrlID())
{
//当没有成员变量时,我们需要访问控件
CSliderCtrl*pSlider=重新解释铸件(pScrollBar);
//在这里处理事件
交换机(nSBCode)
{
结核病病例列表:
病例TB_列表:
病例TB_页面:
案例TB_页面向下:
病例位置:
案例TB_TOP:
病例TB_底部:
病例TB_跟踪:
病例TB_结束追踪:
违约:
打破
}
返回;
}
//如果不是滑块控件,则为默认处理。
CDialog::OnHScroll(nSBCode、NPO、pScrollBar);
}

我意识到我没有以正确的方式处理这个问题。滑块值的更改速率并不重要,重要的是遵循滑块值的速率。这两个比率是独立的。假设由滑块控制的参数在0到1的范围内,则在回转率限制器中应使用滑块值跟随的速率(r)和允许值改变的最大频率(f)来计算最大步长,如下所示:

s = 2 * f / r

包含更多关于您试图展示的问题研究的信息可能会有所帮助。代码片段总是一个加号。这个问题是由于误解导致了不恰当的设计。更新滑块的速度完全取决于程序调用
GetMessage
的速度(有关详细信息,请参阅)。解决办法:不要投票。当应用程序需要更新时,让滑块通知应用程序。Windows GUI是基于事件的。这里的轮询通常是错误的。消息到达的速度不会比应用程序调用的速度快
GetMessage
。如上链接所述,此限制不是滑块控件的功能。为什么你需要知道最大频率?你打算用这些信息做什么?我想用滑块的值和回转率来限制它,以避免突然的变化!为什么你需要提前知道最大的变化率呢?你能不能把观察到的信息去掉?您可以通过调用来查询当前邮件的时间戳。我已经在程序中使用了OnHScroll。我想知道在一个系统中,这些消息到达的速率是多少(以赫兹为单位)。消息泵的处理速度取决于许多因素。阅读IInspectable推荐的MSDN文章,了解更多信息。