如何获得滑块可以移动的最大速率(频率)
How to get the maximum rate (frequency) at which a slider can be moved?
我想确定在基于MFC的Visual C++程序(使用Visual Studio 2012)中移动滑块的速率(频率)。那么,如何通过编程获得适当的轮询率呢?
这是我用来捕获滑块值的代码:
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在设计上是基于事件的。
只需按照Slider通知消息中的说明处理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);
}
我意识到我没有以正确的方式处理这个问题。滑块值的更改速率并不重要,重要的是跟随滑块值的速率。这两种利率是独立的。假设由滑块控制的参数在0到1的范围内,跟随滑块值的速率(r)和允许该值改变的最大频率(f)是转换速率限制器中应该使用的,以计算最大步长,如下所示:
s = 2 * f / r
相关文章:
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 在指针的帮助下,文本文件中单词的频率
- 函数计算用户按下按钮的频率
- 在条件变量中触发错误信号的频率是多少
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 如何在 c++ 中循环中使用频率变化的声音?
- libcurl :显示正在运行的上传和下载速率
- 查找给定范围内最长连续 1 的频率
- 如何在IQualProp::get_AvgFrameRate中重置帧速率?
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 字母 字母频率
- 同步两个具有不同帧速率的传感器
- 如何在不同的线程中保持一定的帧速率
- 根据帧速率缩放/缩小数字
- WM_PAINT消息频率:C#(.Net Framework 4.7.2 WinForms)与C++
- 创建一个函数,返回给定单词在C++中的频率
- 将Kinect v2帧速率(rgb、深度、骨架)设置为每秒25帧
- 如何期望通过使用Google Test(Mock)以特定频率调用函数
- 如何获得滑块可以移动的最大速率(频率)