MRU list in MFC
Lynn Herrera -- lherrera@kofax.com Tuesday, May 28, 1996 Environment: VC++ 4.0 / Win 95 and NT I am using the MRU list in an SDI sample application. The application reads images and during the display applies image cleanup algorithms to it. After picking the 1st item from the MRU list, I want to be able to pick it again and have it read the same image file again. Unfortunately, the first item is not reread. I'm not sure how to use CRecentFileList to make this happen. (MFC traps the name and knows it has already been read. Any ideas or examples? I'm using MSDEV C++ 4.0 Thanks, Lynn lherrera@kofax.com
Greg D. Tighe -- gdt@eng.aisinc.com Friday, May 31, 1996 [Mini-digest: 2 responses] > After picking the 1st item from the MRU list, I want to be able > to pick it again and have it read the same image file again. > > Unfortunately, the first item is not reread. I'm not sure how to > use CRecentFileList to make this happen. (MFC traps the name and > knows it has already been read. > Once you do something like this: CMyDocument *pDoc = AfxGetApp()->OpenDocumentFile(<1st MRU file name>); You need to determine whether the document was actually read in from disk or was already loaded and its view simply brought to the front. You can do this by adding a member variable to your doc class which only gets set when you read from disk. If this variable is not set and you want to force a reread from disk you can do the following: pDoc->OnOpenDocument (pDoc->GetPathName ()); Hope this helps. -Greg Tighe Applied Intelligent Systems, Inc. Ann Arbor, MI gdt@aisinc.com -----From: "Peter A. Vanvliet"MFC's logic for reselecting an already opened document from the MRU list (which has not been modified), is to simply set the "focus" back to the document that is already loaded. You can prevent that by overriding the default response functions: ON_COMMAND_EX(ID_FILE_MRU_FILE1, OnOpenRecentFile) BOOL CMyApp::OnOpenRecentFile(UINT nID) { // If there is a document open, close it. if (m_pTheDoc != NULL) if (!m_pTheDoc->CloseThisDocument()) return FALSE; return CWinApp::OnOpenRecentFile(nID) } In this particular application I only allowed one CDocument to be open at a time, so I had to override the OnOpenRecentFile() function to close the currently opened document and load the new one the user selected. This has the side effect of reloading the same document if the user reselected the currently open document. Peter,
| Вернуться в корень Архива |