基于dialog的程序
加了一个slider。
然后加了一个响应函数
代码如下:
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
// TODO: Add your message handler code here and/or call default
if((CSliderCtrl*)pScrollBar == &m_sldTimer)
{
if(nSBCode==SB_ENDSCROLL)
{
nPos = m_sldTimer.GetPos();
CString str;
str.Format("%d",nPos);
AfxMessageBox(str);
}
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}当我拖动slider的时候,为什么会连续弹出两个同样的messageBox?

解决方案 »

  1.   

    个人认为这是MessageBox的问题,使用MessageBox导致WM_HSCROLL消息传递了两次。
    请看我的代码:
    void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
      // TODO: Add your message handler code here and/or call default
      if((CSliderCtrl*)pScrollBar == &m_sldTimer && nSBCode==TB_ENDTRACK)
      {
        CString str;
        GetDlgItem(IDC_BUTTON1)->GetWindowText(str);
        str += "1";
        GetDlgItem(IDC_BUTTON1)->SetWindowText(str);
      }
      CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    我使用了改变按钮文本的方式来监测消息的传递情况,结果是WM_HSCROLL消息只响应了一次。
      

  2.   

    确实是messagebox的问题。很奇怪在AfxMessageBox(str)这一句就跳回去了,像递归一样。
      

  3.   

    MessageBox经常会出现这类的问题
      

  4.   

    MessageBox可能象一个中断方式。当前正在响应slider控件的HSCROLL事件,调用AfxMessageBox会启动一个新对话框,那么当前焦点就到了这个消息对话框上,当消息对话框退出后,焦点又回到了slider控件上,而此时可能控件上还记录着当前是HSCROLL事件,所以