Below are what I'm desired.
I use SDI with DOC/VIEW architecture. I have a CString vector that stores
some files' path. I want to let the program(not user clicking the "Save File
excutes next time. So I can get the files' path.
OnCloseDocument() and read it back in OnNewDocument(). Is this mean that the
But still got no better solution for it by your suggestions. Is any correct
"Joseph M. Newcomer" wrote:
You wouldn't. It wouldn't make any sense to do this, and if you think you need to do
this, you are wrong. Therefore, your whole approach to the problem is wrong. If this is
state which is independent of the document, you would DEFINITELY not involve the document
in the task. If the document cared, why would you put it in the InitInstance and
ExitInstance handler? You might put it on the OnNewDocument or OnCloseDocument handlers
of your CDocument-derived class, but it cannot possibly make sense to put it in the
InitInstance or ExitInstance handlers. It is not clear why it is a document property
either, or why you would use the document serialization class to read it, or use ANY
serialization class to read it. You could store it as a text file, you could store it as
an XML-based text file, you could store it in the Registry, but trying to hijack the
document serialization code to handle something that doesn't make sense (it is not part of
the document, so it makes no sense to handle it in the document serialization code, whose
purpose is to read and write the *contents* of a document).
Stop what you are doing and consider the right way to do it.
joe
On Tue, 10 Mar 2009 23:23:01 -0700, 97612 <97612@discussions.microsoft.com> wrote:
May I have another question? How to get the pointer of SDI's document in
InitialInstance and ExitInstance?
"David Wilkinson" wrote:
97612 wrote:
I use SDI with DOC/VIEW architecture. I have a CString vector that stroes
some files' path. I want to let the program to save the CString vector when
the program exist, and load back to the CString vector when the program
excutes next time. So I can get the files' path. Below are part of source
code.
//***************************************
in .h:
class CMyDoc : public CDocument
{
protected: // create from serialization only
CePhotoSyncDoc();
DECLARE_DYNCREATE(CePhotoSyncDoc)
public:
std::vector<CString> m_vThuSelFileName;
}
-------------------------------------------------------------------------------
in .cpp:
IMPLEMENT_DYNCREATE(CMyDoc, CDocument)
void CMyDoc::Serialize(CArchive& ar)
{
CObject::Serialize( ar );
unsigned int vectorSize = 0;
if(ar.IsStoring())
{
// TODO: add storing code here
ar << m_vThuSelFileName.size();
for(unsigned int i = 0; i < m_vThuSelFileName.size(); i ++)
{
ar << m_vThuSelFileName.at(i);
}
}
else
{
// TODO: add loading code here
ar >> vectorSize;
for(unsigned int i = 0; i < vectorSize; i ++)
{
ar >> m_vThuSelFileName.at(i);
}
}
}
//**********************************************
Question1. How?
But I don't know how to let the program(not user clicking "Save As" or "Save
File") to utilize the DOC's serialization function storing the CString vector
automaticly, and let the program loading back the CString vector automaticly.
Any suggestions? Thanks.
Question2. When?
And assume I know how to do that. Should I do the operation when user click
the exist button or x button at the top right position of the window?
It sounds that you want to save some strings that are properties of the
application as a whole, not of each document.
I would not use MFC serialization for this (I would not use it for document
serialization either, but that's another issue).
Data of this kind is normally placed in an AppName subdirectory of
Documents and Settings\UserName\Application Data
(on XP). You can get this directory on any OS using SHGetSpecialFolderPath()
with CSIDL_APPDATA.
I would just write the strings in some simple text format, or in XML if the
strings have some hierarchical structure. Write the strings in ExitInstance(),
and read them back in InitInstance().
--
David Wilkinson
Visual C++ MVP
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm