我做了一个基于对话框的程序,在点击一个按钮时弹出另一个对话(这个对话框已在主对话框的头文件中创建对象),用的是DoModal(),可弹出的对话框只是使程序运行停在这条语句,等待我关闭对话框,但我却仍可使主对话框获得焦点。也就是说我仍能操作主对话框上的按钮,但我肯定DoModal()后的语句尚未运行。请指点迷津。

解决方案 »

  1.   

    if(dlg.DoModal()==IDOK)
    {
    AfxMessageBox("ok");
    }
      

  2.   

    如果是非模式对话框,为什么DoModal()后的语句没有继续执行,一定要我关闭这个对话框后才执行呢?
      

  3.   

    这是原码:
    if(mAddUnitDlg.DoModal()==IDOK)
    {
    UnitList *tmppUnitList;
    if(!mUnitManagerInstance.AddUnit((const char*)(mAddUnitDlg.IPAddr), mAddUnitDlg.UName, &tmppUnitList))
    MessageBox("指定的设备不在线或地址有误", "没找到");
    else
    {
    if(NULL == pUnitList)
    pUnitList = tmppUnitList;
    InsertUnit(tmppUnitList);
    m_UnitTree.Invalidate();
    }
    }弹出对话框后,主窗口仍可获得焦点,我可以再按主窗口上的按钮来弹出其它窗口。
      

  4.   

    ....OnButton1()
    {
     CMyDialog  dlg;
     if(IDOK==dlg.DoModal())
    {
     将dlg.data传给主对话框
    }
    举例颜色对话框
    ....OnButton1()
    {
     CColorDialog  dlg;
     if(IDOK==dlg.DoModal())
    {
     color=dlg.GetColor();
    }}
      

  5.   

    试一下在弹出那个对话框前调用ReleaseCapture
      

  6.   

    我只想弹出模式对话框后,在操作者关闭该对话框前不能进行其他操作,就象通常的About对话框。而我这个基于对话框的程序就连VC自动生成的About对话框都是这样,你不会说About对话框不是模式对话框吧!但弹出About对话框后,我仍可操作主窗口。
      

  7.   

    to:fenex(爱看DVD)
    不行。
    问题应该是出在了主对话框上,因为系统自动生成的About对话框都失灵了。
      

  8.   

    多谢各位帮助,问题在我。
    我为了让程序在启动后只在托盘上有个小图标,所以重载了DefWindowProc(),并在里面加入了如下代码:
    if(message==133 && !isshow)
    {
    EnableWindow(FALSE);
    ShowWindow(SW_HIDE);
    }
    else
    {
    EnableWindow(TRUE); //就是它的错
    }其实已经不可见也就不必使窗口失效了。
    只是当初有个可笑想法,现在想来有点傻:我不想让别人用程序通过标题找到我的程序已隐藏的主窗口来显示出来操作。其实能把窗口得到就自然可以使它有效,要防止应该在程序内部设一个标志变量来验证当前是否是已登录状态就可以了。现在我也知道了,当弹出一个模式对话框时,系统隐藏的调用了使其父窗口失效的指令。再次感谢各位,结贴。