Doc/View-Kill default frame
От: Аноним  
Дата: 15.04.01 16:52
Оценка:
Доброго времени суток.
Наверняка многие сталкивались с проблемой когда созданный по умолчанию
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 но и открытие файла из списка
последних использованных. Буду очень признателен.
Re: Doc/View-Kill default frame
От: Artchy  
Дата: 16.04.01 07:55
Оценка:
ИХМО вызывать OnCloseDocument самому не стоит, ровно как и любой метод, начинающийся на on — это методы, вызываемые мфцой.
Re[2]: Doc/View-Kill default frame
От: Аноним  
Дата: 16.04.01 09:54
Оценка:
Здравствуйте Artchy, 16.04.2001 01:55:41 вы писали:

>ИХМО вызывать OnCloseDocument самому не стоит, ровно как и любой метод, начинающийся на on — это методы, вызываемые мфцой.


Да, конечно вы правы, но я не стал дальше копаться, т.к. понял что нужен именно универсальный метод
учитывающий и список последних открытых файлов.
Re[3]: Doc/View-Kill default frame
От: asv  
Дата: 20.04.01 09:25
Оценка:
Здравствуйте 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 обновит все свои таблицы, как при закрытии документа кликом мыши.

По идее так и должно быть.
А вот как отловить открытие документа из списка последних открытых файлов?
Re[5]: Doc/View-Kill default frame
От: VLK  
Дата: 22.04.01 08:05
Оценка:
Здравствуйте antony, 20.04.2001 07:09:25 вы писали:

>Здравствуйте asv, 20.04.2001 03:25:24 вы писали:

>>Я думаю, если послать WM_CLOSE MDIChildFrame`у, вызовется стандартный механизм закрытия, и, соответственно, MFC обновит все свои таблицы, как при закрытии документа кликом мыши.
>
>По идее так и должно быть.
>А вот как отловить открытие документа из списка последних открытых файлов?

Доброго времени суток!

Я очень надеюсь,что для этого будет достаточно перекрыть
функцию OnOpenRecentFile:

BOOL CWinApp::OnOpenRecentFile(UINT nID)
{
// ... skipped
if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL)
m_pRecentFileList->Remove(nIndex);

return TRUE;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.