程序中每次单击事件都会触发下面的函数
void CAdvanceButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
/*if(m_bDisabled) 
return; */
if(!m_strBeep.IsEmpty())
::PlaySound(m_strBeep,NULL,SND_ASYNC);
GetParent()->PostMessage(WM_COMMAND,GetDlgCtrlID());
CWnd::OnLButtonDown(nFlags, point);
}
我想在设置一个标志位,在单击一次后的忽略马上再次单击的消息,只有等后面的函数都相应的运行完成后才允许再次单击,可是不知道为什么总是屏蔽不掉,希望大侠们指点下

解决方案 »

  1.   

    你在“相应得运行完成”之前,怎么控制m_bDisabled得?
      

  2.   

    弄个互斥吧
    WaitForSingleObject
      

  3.   

    m_bDisabled 默认是为 false, 当运行后面相应函数时,m_bDisabled设为true,然后在函数运行结束后再把bDisabled设为false。
      

  4.   


    void CAdvanceButton::OnLButtonDown(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        
        CWnd::OnLButtonDown(nFlags, point);    if(m_bDisabled) 
            return;
        if(!m_strBeep.IsEmpty())
            ::PlaySound(m_strBeep,NULL,SND_ASYNC);
        GetParent()->PostMessage(WM_COMMAND,GetDlgCtrlID());
    }this ????
      

  5.   

    PostMessage是异步的,因此还没等“后面的相应函数”执行,另外一个OnLButtonDown又开始执行了!
    所以你应该在进入OnLButtonDown的时候翻转m_bDisabled,不要等到“后面相应的函数”内再设置它为true
      

  6.   

    可是左右的左键单击函数都要相应这个函数,如果在里面竟把m_bDisabled翻转,那么后边所有的调用都要把m_bDisabled这个值再转过来。有没有其他的好办法呢?4楼兄弟的帖子没看明白啊