他们都是对话框。
父窗口属性为popup、no title bar
子窗口属性也一样。子窗口创建语句为RTDataDlg.Create(IDD_RTDATA, this);(父窗口OnInitDialog中)。当父窗口最小化又最大化后,子对话框消失。
如果把子窗口设为child属性则更不行,子窗口得不到刷新!而且把鼠标移到子窗口上面时,被子窗口盖住的父窗口中的按钮、编辑框等纷纷显示到了子窗口上!

解决方案 »

  1.   

    当父窗口最小化又最大化后,子对话框消失。
    ==应该不是消失,而是在父窗口后面
    子窗口用SetWindowPos(&wndTopMost,...)设置成置顶吧
      

  2.   

    我在子窗口的OnCancel中调用了:CDialog::OnCancel();
    应该是这句的原因,改成ShowWindow(SW_HIDE);就行了,非模态对话框不能调用CDialog::OnCancel();吗,我以前没注意这个问题,不过调用了也没事,仍然可以通过ShowWindow把它显示出来,那么到底CDialog::OnCancel();做了些什么呢?
      

  3.   

    CDialog::OnCancel();是退出对话框阿。ShowWindow(SW_HIDE);是隐藏对话框,当然不一样了。
      

  4.   

    对于无模式对话框,他们的差别其实并不像你想像的那么大,不信你试试,假设使用场景如下:
    主对话框上有一按钮,点击后查找对话框弹出来(查找对话框为主窗口的子窗口),再点击又隐藏,这两步使用ShowWindow函数,没有什么问题的。
    但是查找对话框上又有一个退出按钮,比如说就是自动生成的那个IDCANCEL按钮,点击它同样要隐藏对话框(查找对话框自己隐藏自己),此时是可以调用CDialog::OnCancel();来隐藏自己,当主窗口再次需要查找对话框的时候,也可以用ShowWindow来显示刚才用CDialog::OnCancel();隐藏掉的窗口,我一直这么用的,也没出现什么问题。