Я столкнулся с проблемой, используя CFileDialog
в моем коде.
Когда я звоню CFileDialog
из ModalDialog, чтобы выбрать файл.
Весь мой фон ModalDialog удаляется после закрытия и повторного открытия текущего представления.
Процедура следовала:
CFileDialog
для выбора файлаЗамечания : Эта проблема возникает, только если я выбираю файл.
Если я нажму на Отмена в 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 запущенного процесса.
Из-за этого фоновое изображение не может быть найдено в новом месте и, следовательно, фон стирается.
Чтобы этого не произошло, нам нужно использовать флаг OFN_NOCHANGEDIR в CFileDialog, который сохраняет рабочий каталог.
Других решений пока нет …