В моем коде есть проблема с использованием CFileDialog
.Ошибка окраски при выборе файла с использованием CFileDialog
Когда я вызываю CFileDialog
из ModalDialog, выберите файл. Весь мой фон ModalDialog удаляется, как только текущий вид открывается и снова открывается.
Процедуры, применявшиеся:
- Главный диалог
- Открылся MODALDIALOG
- Открыт
CFileDialog
для выбора файла - Выход ModalDialog
- Reopen 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);
}
'DefWindowProc (WM_PAINT, (WPARAM) dc.m_hDC, (LPARAM) 0);' выглядит подозрительно для меня, попробуйте удалить его. –
@MichaelWalz: Я попробовал ваше предложение об удалении функции DefWindowProc. Но он не решает проблему, По внешнему виду, я не думаю, что это проблема с художником. Кажется, что больше связано с CFileDialog. Просто повторить повтор, это не происходит, когда я просто отменил CFileDialog. Скорее всего, только когда я выбираю файл из него и сохраняю. –
В вашем коде есть ошибка, но мы ее не видим. Тот факт, что вы вызываете оконную процедуру из обработчика 'WM_PAINT', показывает тревожное отсутствие понимания, как работает MFC. Я был бы удивлен, если бы это была твоя единственная ошибка. – IInspectable