MessageBox弹出窗口后,可以拖动,但无法操作。导致主窗口也无法关闭,只用在Windows任务管理器中直接杀进程。求解,分不够可追加。

解决方案 »

  1.   

    刚才试了,按“esc"也不能关闭
      

  2.   

    再说说程序环境:一个MFC的SDI程序。
      

  3.   

    按 方向键 是否可以切换 确定和取消按钮 的焦点,如果是,还可以按下enter有效的话,我倒是知道原因。
      

  4.   

    新发现:只要同时放上两个MessageBox,第一个能正常处理,第二个就只能拖动,无法处理了,而且弹出的窗口,也不是在最上面。超级郁闷
      

  5.   

    只要同时放上两个MessageBox充分说明问题了,你肯定是在线程中使用的
      

  6.   

    代码如下:
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1){return -1;}
    MessageBox("test.message");//这句正常运行了
    MessageBox("test.message");//这句在调试时,弹出的对话框时不是最上面层对话框,也无法操作
    return 0;
    }
      

  7.   

    在PreCreateWindow中直接连续用两个MessageBox,一切正常。现在初步分析问题出在:PreCreateWindow之后与OnCreate之前  这之间有什么问题搞错了
      

  8.   

    你的能一次弹出两个MessageBox出来,第一个不关闭,第二个能弹出来??
      

  9.   

    不能,是弹出第一个,关闭它后,再弹出第二个,第二个就不能处理了。现在的问题:在OnCreate的再前面一步:OnCreateClient中也不能用两个MessageBox.
      

  10.   

    问题点已找到,在此描述一二,希望对后来者有点帮助:MessageBox弹出的窗口,被OnNcActivate设置为非激活状态了
    BOOL CMainFrame::OnNcActivate( BOOL bActive )
    {
    //继承后,不做操作,防止画出原主窗口粗边框

    return TRUE;//如此就没问题了,以前是 return bActive;
    }还好,以前每天备份一个版本,慢慢对比,才知道哪个版本出了问题,再看当天改了哪些地方。建议大家以后每天备份当天的版本。
    虽然问题是自己解决的,但还是很感谢大家的回复,让我在解决问题上,有那么点心里安慰,谢谢大家,谢谢CSDN