所谓被DoModal就是
当一个窗口里面弹出一个模式对话框,这个窗口就不能响应鼠标和键盘了比如窗口A先CreateWindow了窗口B,然后A可能会弹出一个模式对话框C
我的想法是,当C弹出来以后,B也和A一样不允许响应鼠标和键盘
也就是说怎么才能在B里面知道A是否被DoModal了呢?

解决方案 »

  1.   

    “也就是说怎么才能在B里面知道A是否被DoModal了呢?”————这句话有问题吧,应该是怎么知道C被DoModal了吧,否则如果没有A,哪儿有B呢?如果是如我上面说的,则你可以先获取C模式窗口对话框的指针,如m_pModalWinC,则可以通过这个判断:
    if(m_pModalWinC->GetSafeHwnd() != NULL)
    {
        //被DoModal了,可以进行你想要的操作;
    }
      

  2.   

    笨方法,在A的InitDialog函数中设置一个成员变量是TRUE(初始值FALSE),在OnDestory中设置为FALSE,在B中检测A得着各成员变量是不是TRUE;
      

  3.   

    在B中检测A的这个成员变量是不是TRUE;
      

  4.   

    将你DoModal出来的对话框的父窗口设为你程序的最顶层的窗口(比如CMainFrame),
    这样, B也无法响应了
      

  5.   

    C是一个临时的对话框,A中并没有保存C的实例,在B中无法获得C的窗口句柄
    而且A和C的代码由于一些原因无法改动:(
      

  6.   

    To bluebohe(薄荷) -------就算判断是true了,还得通过一些方法来实现屏蔽B窗口的输入,所以个人感觉newsb(newsb)的做法好一点              ---纯属个人意见,并没有针对bluebohe(薄荷)的意思
      

  7.   

    这样CXXDialog dlg
    ....
    判断dlg.m_hWnd是否为空!
      

  8.   

    : clarkralf(克拉克-拉尔夫) ( ) 信誉:100  2003-09-22 13:36:00  得分:0 
     
     
      To bluebohe(薄荷) -------就算判断是true了,还得通过一些方法来实现屏蔽B窗口的输入,所以个人感觉newsb(newsb)的做法好一点              ---纯属个人意见,并没有针对bluebohe(薄荷)的意思
     
     
    我并没有说我的办法好是不?我只是看要求怎样就想什么自己能想到的解决办法,他当时问的只是怎么才能在B里面知道A是否被DoModal了不是吗?
      

  9.   

    判断dlg.m_hWnd是否为空!
    或将弹出窗口的父窗口设为最顶层的窗口, B就无法响应了
      

  10.   

    如果是a弹的c那么a一定知道设么时候domodal了。这样可以让a告诉b,或者做一个方法让b来调用,用来查询a是否domodal
      

  11.   

    无论对那个窗口操作,获取窗口句柄就万事OK了你的A、C窗口的代码没有办法改变,则他们的标题也就固定了,用FindWindow()找到A的窗口句柄,如果句柄为空,则已经销毁(也有可能隐藏了————不是被挡住,是真正隐藏),这样也就在你的要求下达到目的了
      

  12.   

    newsb(newsb) 你搞笑啊,应该设置变量控制的!