滑动条/块响应消息WM_HSCROLL导致OnHScroll函数执行了两次的问题
2014-06-06 09:25
302 查看
滑动条/块响应消息WM_HSCROLL导致OnHScroll函数执行了两次的问题
2013-03-15 11:31256人阅读 评论(0)
收藏
举报
滑动块 WM_HSCROLOnHScroll函数执行2次
滑动条/块响应拖拉操作的消息中WM_HSCROLL,在OnHScroll函数中进行调试,发现点击箭头时,OnHScroll函数执行了两次。这是因为点击箭头时nSBCode会被赋值两次,一个SB_PAGELEFT(右箭头就是right),完了之后SB_ENDSCROLL也会发出,所以你onHSCroll里的内容会被履行两次,解决方法是在onHSCroll函数内建立一个switch处理nSBCode,且功能代码放在各case下,就算是同样的代码也要复制即便放在case中,如果放在switch外又会被执行两遍。下面举例来说明一个可行的其他解决办法:
void CSNUBBERDlg::OnHScroll(UINTnSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or calldefault
CDialogEx::OnHScroll(nSBCode,nPos, pScrollBar);
int nID = pScrollBar->GetDlgCtrlID(); //获取滑动块ID号
if (nID == IDC_SCROLLBAR1)
{ switch(nSBCode) //
按是哪一种操作进行处理
{ case SB_LINELEFT: m_vset1-=5; //点击左箭头
break;
case SB_LINERIGHT: m_vset1+=5; //点击右箭头
break;
caseSB_THUMBPOSITION: //拖动滑动块(不允许拖动)
break;
caseSB_ENDSCROLL:return;
}
if(m_vset1<0) m_vset1 = 0;
if(m_vset1>500)m_vset1 = 500;
m_scrollbar1.SetScrollPos(m_vset1);
CString str;
str.Format(_T("%d"),m_vset1);
GetDlgItem(IDC_EDIT_NUM1)->SetWindowText(str);
if(!m_bSerialPortOpened[1])return;
SendData(m_vset1,1);
}
}
本例中不加“caseSB_ENDSCROLL:
return;”的话,switch后面的代码会被执行两遍,
加上“caseSB_ENDSCROLL: return;”的话,switch后面的代码只会被执行一遍。
相关文章推荐
- MFC单文档程序添加消息映射和消息响应函数的问题
- WM_CREATE和WM_INITDIALOG消息响应函数之区别,以及MFC应用程序中处理消息的...
- delphi 使用工控机控件 iThreadTimes 出现问题, 导致主程序创建页面的时候, 阻塞消息, 不能正常执行。
- Jquery Mobile中pageinit等函数执行两次的问题【终极解决】
- WM_CREATE和WM_INITDIALOG消息响应函数之区别,以及MFC应用程序中处理消息的...
- javascript异步执行函数导致的变量变化问题解决思路
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积
- wx.request的fail回调函数执行两次的问题
- WM_CREATE消息响应函数和WM_INITDIALOG消息响应函数之区别
- 用非管理员权限启动主程序,并用管理员权限启动子程序,导致WM_COPYDATA消息发送失败的问题
- WM_CREATE消息响应函数和WM_INITDIALOG消息响应函数之区别
- MFC中setimer和ontimer定时器函数到时间不能触发执行是因为WM_TIMER消息的优先级低
- 在消息响应函数中立即处理PENDING WM_PAINT解决刷新问题
- 解决iphone safari下后退按钮导致函数不执行的问题
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)
- Jquery Mobile中pageinit等函数执行两次的问题【终极解决】
- IE中页面关闭导致匿名函数执行报"script释放无法执行"错误问题
- PreTranslateMessage无法捕获WM_VSCROLL 滑动条添加消息响应
- LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
- 浅析javascript异步执行函数导致的变量变化问题解决思路