一般来说不会出现这种情况,因为你必须等该消息处理函数处理完毕后,Windows才处理下一个消息。

解决方案 »

  1.   

    这是类似消息重入的问题,请看以下例子:我在主程序中用Create()创建了一个窗口TopWnd,该窗口的父窗口为NULL
    (为了主程序在最小化时该窗口不最小化),在TopWnd中向主窗口发送消息,
    比如点击了一个按钮后,// 主程序的MainFrame中处理TopWnd发送消息的代码
    void CMainFrame::OnTopWndMessage(WPARAM wParam,LPARAM lParam)
    {
    static BOOL bInThisFunction=FALSE; if (bInThisFunction == TRUE) return; // avoid to re-enter
    bInThisFunction=TRUE; if (判断) {
    AfxMessageBox("提示语句");
    }
    else {
    其它代码
    }

    bInThisFunction=FALSE;
    }注意上述代码中的AfxMessageBox语句,当执行了AfxMessageBox后,如果
    TopWnd再发送此消息,则会再进入此消息处理函数(证明是会弹出多个Message Box)。1: 分析:
      因为TopWnd的父窗口不是AfxGetMainWnd()(或其子窗口),所以它拥有自己的消息泵
      (Message Pump);否则不会发生重入的问题。
    2: 解决:
     留意上述代码的bInThisFunction布尔变量,由它实现防止重入的工作。
     
    3: BTW:
     可以参考CFrameWnd::RecalcLayout(),也进行了这样的处理,不过我不知道
     为什么它要防止重入。
     
     // X:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\SRC\WINFRM.CPP
     void CFrameWnd::RecalcLayout(BOOL bNotify)
    {
    if (m_bInRecalcLayout)
    return; m_bInRecalcLayout = TRUE;

    重新计算位置的代码

    m_bInRecalcLayout = FALSE;
    }
      

  2.   

    WINDOWS的消息有两种:排队消息和非排队消息,你说的是非排队消息吧.
    若是排队消息应该没有重入的问题吧.不知道我说的对不对.
      

  3.   

    我觉得应该去查查关于SendMessage和PostMessage的文档。