// CSingleDoc 명령
BOOL CSingleDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
CFile file;
CFileException fe;
CString temp;
temp = CSingleDoc::m_Munja;
int length = temp.GetLength();
if (!file.Open(lpszPathName, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe))
{
ReportSaveLoadException(lpszPathName, &fe,
TRUE, AFX_IDP_INVALID_FILENAME);
return FALSE;
}
// replace calls to Serialize with SaveDIB function
BOOL bSuccess = FALSE;
TRY
{
BeginWaitCursor();
TCHAR *strMemo = new TCHAR[temp.GetLength()+1];
_tcscpy(strMemo,temp); //CString을 w_char* 형으로 카피하고
int nLen = _tcslen(strMemo); //길이구하기
TCHAR szTmp[2]; //w_char 의 2개짜리 생성(한글이어ㄹ서)
WORD wd = 0xFEFF; //0xfeef를 파일의 첫부분에 기록해서 해당 파일이
//유니코드형식임을 알려줘합니다.
//Little-Endiann 시스템은 0xfffe 입니다.
memcpy(szTmp,&wd,2); //맨 앞에 복사하고
file.Write(szTmp,2); //유니코드임을 알려준다.
file.Write(strMemo, nLen * sizeof(WCHAR)); //그리고 파일에 쓴다.
bSuccess = TRUE;
file.Close();
}
CATCH (CException, eSave)
{
file.Abort(); // will not throw an exception
EndWaitCursor();
ReportSaveLoadException(lpszPathName, eSave,
TRUE, AFX_IDP_FAILED_TO_SAVE_DOC);
return FALSE;
}
END_CATCH
EndWaitCursor();
SetModifiedFlag(FALSE); // back to unmodified
if (!bSuccess)
{
// may be other-style DIB (load supported but not save)
// or other problem in SaveDIB
CString strMsg;
//strMsg.LoadString(IDS_CANNOT_SAVE_DIB);
strMsg = _T("저장중 에러가 발생했습니다.");
MessageBox(NULL, strMsg, NULL, MB_ICONINFORMATION | MB_OK);
}
return bSuccess;
//return CDocument::OnSaveDocument(lpszPathName);
}SingleView.cpp
void CSingleView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CSingleDoc* pDoc=GetDocument();
pDoc->m_Munja += TCHAR(nChar);
pDoc->SetModifiedFlag(TRUE);//저장 플래그 세트 설정
Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags);
}SingleDoc.cpp
class CSingleDoc : public CDocument
{
protected: // serialization에서만 만들어집니다.
CSingleDoc();
DECLARE_DYNCREATE(CSingleDoc)
// 특성입니다.
public:
// 작업입니다.
public:
CString m_Munja;
// 재정의입니다.
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
#ifdef SHARED_HANDLERS
virtual void InitializeSearchContent();
virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
#endif // SHARED_HANDLERS
// 구현입니다.
public:
virtual ~CSingleDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 생성된 메시지 맵 함수
protected:
DECLARE_MESSAGE_MAP()
#ifdef SHARED_HANDLERS
// 검색 처리기에 대한 검색 콘텐츠를 설정하는 도우미 함수
void SetSearchContent(const CString& value);
#endif // SHARED_HANDLERS
public:
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
};
