我在一个对话框的按钮相应函数里面打开一个CFileDialog的打开对话框,在运行过程中发现,打开以后,2个对话框有部分重叠,导致闪烁和CFileDialog对话框的关闭和取消按钮不起作用,打开按钮也不起作用,本来是选择位图文件在对话框上显示的,这样也显示不了,请问这个问题怎么解决?怎么把2个对话框移开而不重叠在一起呢?手动移开上面的CFileDialog对话框时,移不动,并且导致CFileDialog对话框的数量变多,好像进入了一个死循环一样???
郁闷???高手救救我

解决方案 »

  1.   

    “并且导致CFileDialog对话框的数量变多,好像进入了一个死循环一样??? ”
    我估计是进入循环了,自己好好找找原因。
      

  2.   


    void CXXXDlg::OnOpenFile() 
    {
    // TODO: Add your control notification handler code here
    char filters[] = "文本文件(*.txt)|*.txt||";
    CFileDialog dlg(TRUE, "文本文件", "*.txt", 0, filters);
    if(dlg.DoModal() == IDOK)
    {
    }不会出现问题检查以下其他的吧
      

  3.   

      我把这段代码放到其他函数,可以正确执行啊,我想问的是,对话框重叠会不会导致这个问题?是不是由于焦点的问题???我是在打开对话框中选定一个位图,再在被覆盖的下面的对话框的Picture控件中显示位图,在线等。。
      

  4.   

    代码如下:我是在OnPaint函数中相应的,但是我设定了一个类bool tag=false,当tag=ture的时候才会调用打开对话框,并且在打开对话框中设定tag=false;代码如下:
    void PhotoManege::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    CDialog::OnPaint();
            if(tag==ture)
    {
    static char BASED_CODE szFilter[]="BMP Files(*.bmp)|*.bmp|All Files(*.*)|*.*||";
    CFileDialog dlg(TRUE,"BMP",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
    if(dlg.DoModal()!=IDOK)
    return;
    CString PathName=dlg.GetPathName();// 得到BMP文件路径 MessageBox(PathName," 文件路径");
            tag=false;
    }
    }
      

  5.   

    tag = false 移动到 if(tag == true) 里面的最前面..
      

  6.   

    在OnPaint中!!!!!
    显然是不行的改变你的方式,
    在你的tag=false; 之前已经不知道执行了多少次OnPaint了~~所以就出现了重复和死循环的现象