【发布时间】:2015-12-11 14:06:01
【问题描述】:
我想确定在基于 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);
}
如果无法以编程方式确定此值,则是否存在近似值,例如100赫兹?
【问题讨论】:
-
包含更多关于您尝试展示问题研究的信息可能会有所帮助。代码 sn-ps 总是一个加号。
-
这个问题是由于误解导致设计不当的结果。您可以更新滑块的速度完全取决于您的程序调用
GetMessage的速度(详见Paint messages will come in as fast as you let them)。解决方案:不要轮询。让滑块在需要更新时通知您的应用程序。 Windows GUI 是基于事件的。轮询通常在这里是错误的。 -
消息到达的速度不会比您的应用程序调用
GetMessage快。正如上面的链接所解释的,此限制不是滑块控件的功能。为什么你需要知道最大值。频率?你打算如何处理这些信息? -
我想取滑块的值并限制它的斜率,避免突然变化!
-
为什么你需要知道最大值。那么提前改变汇率呢?你不能处理观察到的信息吗?您可以通过调用GetMessageTime查询当前消息的时间戳。
标签: c++ windows visual-studio-2012 mfc