Я пытаюсь вызвать CFileDialog, чтобы позволить пользователю выбрать файл.
Моя программа — приложение MFC, и я использую VS2005.
Вот моя проблема:
У меня есть основной вид, который создает немодальное диалоговое окно. В этом диалоговом окне у меня есть пункт меню, который делает простой вызов CFileDialog:
CFileDialog dlgFile(true);
dlgFile.DoModal();
Но программа всегда висит на DoModal. Программа не отвечает на команды, и диспетчер задач говорит, что перестал отвечать.
Другие интересные фрагменты информации:
Ближайшие вопросы, которые я мог найти, это: Почему CFileDialog :: DoModal () зависает?
Тем не менее, я не использую темы (по крайней мере, я на 95% уверен, что я не использую, это не только мой проект). Мой проект автоматически продвигается? Если так, как я могу убедиться, что это не вызывает у меня проблем?
У меня такая же проблема в VS2008.
Попробуйте установить на ложный последний параметр в конструкторе CFileDialog (bVistaStyle)
dlgFile.DoModal()
вызывает модальную подпрограмму, она включает / отключает и перефокусирует окна, возможно, в этом проблема. Ты можешь попробовать GetOpenFileName
вместо:
void CModeless::foo()
{
//EnableWindow(0);
OPENFILENAME ofn = { 0 };
char buf[300];
memset(buf, 0, 300);
ofn.lpstrFile = buf;
ofn.nMaxFile = 300;
ofn.lStructSize = sizeof(OPENFILENAME);
//ofn.hwndOwner = AfxGetApp()->m_pMainWnd->m_hWnd;
GetOpenFileName(&ofn);
//EnableWindow(1);
}
Если нет ошибки, тогда раскомментируйте EnableWindow
а также ofn.hwndOwner
, Попробуйте снова. Вы также можете попробовать этот метод:
void CModeless::foo()
{
CWnd *wnd = GetParent(); //or AfxGetApp()->m_pMainWnd
EnableWindow(0);
CFileDialog dlg(TRUE, 0, 0, 0, 0, wnd, 0, 1);
dlg.DoModal();
EnableWindow(1);
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
if (!AfxGetApp()->PumpMessage())
break;
SetFocus();
}
Мой диалог на основе CDialogEx не смог отобразить CFileDialog. Из моего CDocument все работало нормально.
Я обнаружил, что мой диалог пользовательский контроль, который был получен из CStatic и перекрыл виртуальный WindowProc ().
После комментирования WindowProc CFileDialog показывался как обычно.
Проблема только для CFileDialog «m_bVistaStyle», и замораживание происходит в IFileDialog-> Show ().