我在代码中使用CFileDialog时遇到问题。

当我从ModalDialog调用CFileDialog时,选择一个文件。
一旦退出当前 View 并重新打开,我的整个ModalDialog背景就会被擦除。

遵循的程序:

  • 主对话框
  • 打开ModalDialog
  • 打开CFileDialog以选择文件
  • 退出ModalDialog
  • 重新打开ModalDialog [删除背景]

  • 注意:仅当我选择一个文件时,才会发生此问题。
    如果我单击CFileDialog中的“取消”。没有问题。

    PFB,我的CFileDialog的代码段使用:
    //This is the code to Open the DoModal dialog from MainWindow
    //
    void CCommonDlg::OnBnClickedButton1()
    {
    
        COSDADlg dlg;
        //m_pMainWnd = &dlg;
        INT_PTR nResponse = dlg.DoModal();
        if (nResponse == IDOK)
        {
    
        }
        else if (nResponse == IDCANCEL)
        {
            // TODO: Place code here to handle when the dialog is
            //  dismissed with Cancel
        }
    
    }
    
    // This is the code for open CFileDialog from ModalDialog to save file
    //
    void COSDADlg::OnBnClickedButton1()
    {
    
            CFileDialog dlgFile(FALSE);
    
            CString fileName;
            dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(FILE_LIST_BUFFER_SIZE);
            dlgFile.GetOFN().nMaxFile = FILE_LIST_BUFFER_SIZE;
    
    
            INT_PTR nResult = dlgFile.DoModal();
            fileName.ReleaseBuffer();
    
    }
    
    //This is the code to paint the background image for ModalDialog
    //
    void COSDADlg::OnPaint()
    {
        CPaintDC dc(this); // device context for painting
    
        Graphics    graph(dc.m_hDC);
        CRect rt;
        GetWindowRect(&rt);
        graph.DrawImage(m_pImage, (INT)0, (INT)0,  (INT)rt.Width() , (INT)rt.Height() );
        DefWindowProc(WM_PAINT, (WPARAM)dc.m_hDC, (LPARAM)0);
    
    }
    

    最佳答案

    我已经找到问题背后的原因。

    当我们使用CFileDialog保存/选择文件时,默认行为是更改正在运行的进程的WorkingDirectory。

    因此,在新位置找不到背景图像,因此背景被删除。

    为了确保不会发生这种情况,我们需要在CFileDialog中使用OFN_NOCHANGEDIR标志,该标志保留了工作目录。

    10-07 19:12