파일 불러오기/저장하기

(CDib 클래스를 이용하여 비트맵을 불러오는 예제에서)

 

1. 도큐먼트에 CDib 클래스의 멤버 변수를 추가합니다. 물론 도큐먼트 클래스에서 이리저리 사용할 거니까 public으로 설정해야겠죠. 물론 그 전에 Dib.h/cpp 파일을 복사해 넣고 프로젝트에 추가하고 헤더파일 인클루드 하는 건 말 안해도 알겠죠?

public:
       CDib    m_dib;

2. 클래스 위저드를 열어 Class name에서 xxApp 클래스를 선택, Object IDs에서 ID_FILE_OPEN을 선택, Messages에서 COMMAND를 선택하고, Add Function 버튼을 누릅니다.

 써넣을 코드는 다음처럼...

void CDibLookExApp::OnFileOpen()
{
        // TODO: Add your command handler code here
        char szFilter[] = "Image Files(*.BMP)|*.BMP|All Files(*.*)|*.*||";

        CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
        if(IDOK == fileDlg.DoModal()) {
                OpenDocumentFile(fileDlg.GetPathName());

        }               
}

 만약 확장자를 여럿 지정하려면 다음을 참고하세요.

char szFilter[] = "Image Files(*.BMP, *.IPF)|*.BMP; *.IPF|All Files(*.*)|*.*||";

 굵은 글씨 부분을 보면 알겠지만 확장자 사이를 세미콜론(;)으로 구분합니다.

3. 다시 클래스 위저드를 열어 이번에는 도큐먼트 클래스에서 OnOpenDocument를 선택합니다.

 이 함수에서 인자인 lpszPathName 는 위의 OnFileOpen에서 생성한 파일 열기 다이얼로그에서 얻은, 전체 경로를 포함한 파일이름입니다. 그리고 LoadBMP() 함수는 CDIB 클래스의 멤버함수로 비트맵 파일을 불러오는 함수죠.

BOOL CDibLookExDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
        if (!CDocument::OnOpenDocument(lpszPathName))
                return FALSE;
        
        // TODO: Add your specialized creation code here
        if(!m_dib.LoadBMP(lpszPathName)) return FALSE;

        return TRUE;
}

4. 다음은 위와 같은 방법으로 OnSaveDocument를 선택합니다.

BOOL CDibLookExDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
        // TODO: Add your specialized code here and/or call the base class
        if(!m_dib.SaveBMP(lpszPathName)) return FALSE;

        return CDocument::OnSaveDocument(lpszPathName);
}