非模先弹出来的,非模不会会阻塞进程运行,你在非模不被点击的情况下可以让模态获得焦点,但是停止响应,是因为模态框未关吧,它会阻塞进程的。默认情况可能只充许同时弹多个框,特别是还有一个是模态的,应该得到你key消息时,队列中分配响应应该是让对话框全都响应,不然不能上两个都关闭。你可以再测一下,弹出来两个非模的或是两个非模一个模态。

解决方案 »

  1.   

    主窗口弹出后,立刻点出非模态对话框,MessageBox正常弹出你不是关闭才弹出MessageBox吗
      

  2.   

    MessageBox(hWnd, "Over", "Msg", MB_OK);// use CR to close box !
    PostMessage(hWnd, WM_CANCELMODE, 0, 0);
      

  3.   

    大家都未看懂我的意思吗?我重点是说“Messagebox为什么会在主框架最小化再恢复后,非模态对话框会挡住新弹出的MessageBox?”,意思是主框架经过最小化再恢复后,在非模态对话框调出MessageBox的话,MessageBox弹出在非模态对话框后面,而不是最前面!!!而大家都知道MessageBox是模态对话框,整个程序看起来就像瘫痪了一样。其实就是看不见MessageBox而已。现在解决问题的重点是如何让MessageBox重新弹出到最前,而且需要探讨一下MessageBox弹出到后面的原因!!!
      

  4.   

    一大清早起来调试,问题解决了,但不了解成因。问题果然出现在Onpaint函数中,Formview中个Onpaint,还有用到了一个重载了Onpaint的Picture控件。问题出现在控件的Onpaint屏蔽了CPaintDC dc(this)。但不知道成因是什么。希望大家帮忙分析一下
      

  5.   

    找到啦,Onpaint函数中必须有beginpaint() 和endpaint()这两函数,负责会死循环的
      

  6.   

    我也碰到了这种情况,看到有网友说,使用MessageBox时传入Owner,即可解决,不知道有没有其它办法,不传入Owner也可以?
      

  7.   

    MessageBox.Show("HIHI", "TopMostMessageBox", MessageBoxButtons.OKCancel, 
    MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);