Доброго времени суток.
Наверняка многие сталкивались с проблемой когда созданный по умолчанию
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 но и открытие файла из списка
последних использованных. Буду очень признателен.
ИХМО вызывать OnCloseDocument самому не стоит, ровно как и любой метод, начинающийся на on — это методы, вызываемые мфцой.
Re[2]: Doc/View-Kill default frame
От:
Аноним
Дата:
16.04.01 09:54
Оценка:
Здравствуйте Artchy, 16.04.2001 01:55:41 вы писали:
>ИХМО вызывать OnCloseDocument самому не стоит, ровно как и любой метод, начинающийся на on — это методы, вызываемые мфцой.
Да, конечно вы правы, но я не стал дальше копаться, т.к. понял что нужен именно универсальный метод
учитывающий и список последних открытых файлов.
Здравствуйте antony, 16.04.2001 03:54:49 вы писали:
>Здравствуйте Artchy, 16.04.2001 01:55:41 вы писали: > >>ИХМО вызывать OnCloseDocument самому не стоит, ровно как и любой метод, начинающийся на on — это методы, вызываемые мфцой. > >Да, конечно вы правы, но я не стал дальше копаться, т.к. понял что нужен именно универсальный метод >учитывающий и список последних открытых файлов. >
Я думаю, если послать WM_CLOSE MDIChildFrame`у, вызовется стандартный механизм закрытия, и, соответственно, MFC обновит все свои таблицы, как при закрытии документа кликом мыши.
Re[4]: Doc/View-Kill default frame
От:
Аноним
Дата:
20.04.01 13:09
Оценка:
Здравствуйте asv, 20.04.2001 03:25:24 вы писали: >Я думаю, если послать WM_CLOSE MDIChildFrame`у, вызовется стандартный механизм закрытия, и, соответственно, MFC обновит все свои таблицы, как при закрытии документа кликом мыши.
По идее так и должно быть.
А вот как отловить открытие документа из списка последних открытых файлов?
Здравствуйте antony, 20.04.2001 07:09:25 вы писали:
>Здравствуйте asv, 20.04.2001 03:25:24 вы писали: >>Я думаю, если послать WM_CLOSE MDIChildFrame`у, вызовется стандартный механизм закрытия, и, соответственно, MFC обновит все свои таблицы, как при закрытии документа кликом мыши. > >По идее так и должно быть. >А вот как отловить открытие документа из списка последних открытых файлов?
Доброго времени суток!
Я очень надеюсь,что для этого будет достаточно перекрыть
функцию OnOpenRecentFile: