现在我有个对话框程序,一开始程序同时启动了一个非模式对话框。
现在程序再弹出一个模式对话框。这时,如果去点击主窗口,那么,这个模式对话框就会闪两下,主窗口是无法再操作的。
但另外那个非模式对话框还可以操作,有什么办法可以让点击他的效果和主窗口一样?

解决方案 »

  1.   

    把弹出的模式对话框对话框的pParent设置为那个非模式对话框
    就可已达到你的要求了
      

  2.   

    你的意思是,当你当模式对话框弹出时,前面的那个非模式对话框也不能操作?
    一个方法是将第二个模式对话框的父窗口设为非模式对话框。代码大致如下:
    CMyDialog *plg=new CMyDialog;//这个定义一个全局变量,对应非模式对话框void CfffDlg::OnBnClickedButton1()
    {

    plg->Create(IDD_DIALOG1,this);
    plg->ShowWindow(SW_SHOW);
    }
    以上是弹出非模式对话框。void CfffDlg::OnBnClickedButton2()
    {
    CMyDialog dlg(plg);
    dlg.DoModal();

    }
    以上是弹出模式对话框,注意红色部分。
      

  3.   

    抱歉,重新描述一下:
    ==============================
    有个对话框程序,对话框A,一开始程序同时启动了一个非模式对话框B。
    现在程序再弹出一个模式对话框MC。这时,如果去点击A,那么,这个模式对话框MC就会闪两下,主窗口A是无法再操作的。
    但另外那个非模式对话框B还可以操作。
    现在只能实现A或B其中一个不能操作。。我现在想要的效果是,A和B都不能操作,MC关闭后,才可以响应A、B。
     
     
      

  4.   

    我现在想要的效果是,A和B都不能操作,MC关闭后,才可以响应A、B。
    ==========
    方法上面已经说过了,就是让最后弹出来的MC对话框以B窗口为父窗口就行了,当然B窗口最好是以A窗口为父窗的。
      

  5.   

    MC的父窗口是B的话,A还是可以响应的。这个我试过的。
      

  6.   

    不好意思,我说错了,我试试呢。
    这个MC本来就是B弹出来的,原来设的是NULL,B不能响应消息,A可以。
    我设成A后,A不能响应消息了,但B可以。我还没试过B为parent的情况,试一下呢。
      

  7.   

    如果MC真是B弹出来的话,那么正常情况下,A和B都应该无法响应才对啊!
      

  8.   

    我刚才已经试了,的确不行。A主对话框,某个函数中创建了B,非模式对话框。
    B弹出一个模式对话框MC,这时,不管MC的父窗口是A、B还是NULL都,不行,如果为B和为NULL是一样的效果。弹出MC后,B是不能操作了。但A可以移动,上面的按钮同样可以点击。
    如果父窗口设为A,A不能操作了,但B可以移动,上面的按钮同样可以点击。
      

  9.   

    我不知道你是如何写代码的。
    但是如果真如你所说,A是主对话框,其中一个函数创建了无模式对话框B,而B中的某一个函数又创建了模式对话框MC,那么当MC没有关闭时,A和B都不可能会响应的。
      

  10.   

    搞定了,B的父窗口没有设为A,我设成A后就可以了。谢谢wltg2001。等会再结。不过很奇怪,我A创建B时,是调用一个DLL,在DLL中完成的。
    我单独写了一个EXE测试时,B的父窗口设成NULL,也同样能实现想要的效果。是不是父窗口如果为NULL时,创建会作一些特殊的处理?同一模块中与不同的模块有不同的处理?