Доброго времени суток.
Наверняка многие сталкивались с проблемой когда созданный по умолчанию
MDIChild фрейм не использовался и так и оставался висеть в окне.
Конечно можно его совсем не создавать для чего в InitInstanse
добавляем следующие строки:
if( cmdInfo.m_nShellCommand != CCommandLineInfo::FileNew )
{
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
}
Но всё таки приятно, когда открыл приложение и о тебе вроде как
позаботились :-)
Я пробовал следующую схему — в обработчике ID_FILE_OPEN получаем активный
фрейм, затем его документ, если документ не связан с файлом и не
модифицирован то мы имеем тот самый лишний фрейм, который нам больше не нужен.
Однако при попытке pDoc->OnCloseDocument(); он успешно закрывается, но
следующий вызов CWinApp::OnFileOpen(); приводит к исключению, что то связанное
с несуществующей записью в VTable я так до конца и не понял, вылетаем здесь:
...MFC/SRC/OBJCORE.CPP
// check to make sure the VTable pointer is valid
ASSERT(sizeof(CObject) == sizeof(void*));
if (!AfxIsValidAddress(*(void**)pOb, sizeof(void*), FALSE))
{
TRACE0("ASSERT_VALID fails with illegal vtable pointer.\n");
if (AfxAssertFailedLine(lpszFileName, nLine))
вылетаем здесь =>>> AfxDebugBreak();
return; // quick escape
}
Так вот собственно может кто подскажет проверенную технологию
которая бы учитывала не только ID_FILE_OPEN но и открытие файла из списка
последних использованных. Буду очень признателен.