// 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); };