삽이 부서질 때까지 삽질
[MFC] SDI 간단 분석 본문
응용 프로그램 종류 |
단일 문서 프로젝트 스타일 : MFC 표준 비주얼 스타일 전환 사용 |
문서 템플릿 속성 |
파일 확장명 : sdi |
사용자 인터페이스 기능 |
클래식 메뉴 사용 도킹 가능한 클래식 도구 모음 사용 |
고급 기능 |
인쇄 및 인쇄 미리 보기만 체크 |
vs2013 이상에서는 안해도 되지만 vs2010 이나 vs2012 을 사용하면 CoInitialize 함수를 추가해줘야 문서 파일을 마우스로 클릭해서 프로그램을 실행할 경우 에러가 발생하지 않는다고 한다..
[이 에러 때문에 많은 고생을...]
sdi 확장명으로 저장했다가 키거나 아니면 드래그 앤 드롭을 하여 파일을 열면 저장한 이름으로 열리는 것을 확인할 수 있다.
[제목 없음으로 저장한 뒤 열면 이렇게~]
[이렇게도 뜨기도하고]
이제 SDI 에서 부가적인 기능을 제공하는 코드를 봐보자.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
이 코드는 해당 위치에 레지스트리가 저장이 된다.
기본 경로는 HKCU\Software\생성된 응용 프로그램\SDITest\Recent FileList 로 저장되어 있다.
EnableShellOpen();
클릭으로 파일을 열 수 있게 하는 함수
RegisterShellFileTypes(TRUE);
도큐먼트 템플릿을 찾아내 도큐먼트 타입을 레지스트리에 등록하는 함수
m_pMainWnd->DragAcceptFiles();
파일을 드래그 앤 드롭하여 파일을 열 수 있게하는 함수
그리고 이 기능들을 정상 작동하기 위해서는 리소스도 필요한데 이 리소스는 문자열 테이블에 IDR_MAINFRAME 리소스에 저장되어 있다. 그리고 CDCocTemplate::GetDocString 함수를 이용해서 접근하면 된다.
그리고 IDR_MAINFRAME 을 보면 \ 로 구분한게 보이는데 이건 서로 다른 의미를 가진 문자열을 구분하여 나열해놓았다.
도큐먼트 클래스
void SetModifiedFlag(BOOL bModified = TRUE)
데이터가 수정된걸 도큐먼트 객체에 알려주려고 사용한다. 그리고 수정되었는데 저장을 하지 않는 상태로 종료되거나 새로운 문서를 호출하면 아래와 같은 메세지 박스가 뜬다.
void UpdateAllViews(CView* pSender, LPARAM IHint = 0L, CObject* pHint = NULL)
도큐먼트 객체가 데이터 수정된 걸 모든 뷰 객체에 전달하여 화면 갱신을 하도록 지시하는 함수이다.
virtual BOOL OnNewDocument()
프로그램이 시작하거나 새 문서를 생성할 때 시작되는 함수이다.
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName)
메뉴에서 파일 - 열기 를 선택했을 때 자동으로 호출되는 함수이다.
virtual BOOL DeleteContents()
OnNewDocument, OnOpenDocument 함수 이전에 호출된다. 그 이유는 새로운 파일을 열 거나 도큐먼트 객체를 재사용할 때 기존에 있는 도큐먼트 객체가 삭제되어야 하기 때문에 호출이 된다.
뷰 클래스
virtual void OnDraw(CDC* pDC)
OnPaint와 같이 화면 출력, 인쇄, 인쇄 미리 보기를 할 때 자동으로 호출되는 함수
virtual void OnInitialUpdate()
뷰 객체가 도큐먼트 객체와 연결된 후 화면에 보이기 전 자동으로 호출되는 함수
virtual void OnUpdate(CView* pSender, LPARAM IHint, CObject* pHint)
OnUpdateViews 와 OnInitialUpdate 함수를 호출하는 함수, Update 함수는 Invalidate 함수를 호출하여 전체를 무효화한다. 그리고 두번째, 세번째 인자를 참조하여 뷰의 화면 일부만 무효화할 수 잇다.
'MFC' 카테고리의 다른 글
[MFC] 정적 분할 윈도우 (0) | 2016.12.07 |
---|---|
[MFC] 동적 분할 윈도우 (0) | 2016.12.06 |
[MFC] 텍스트 파일이 아닌 확장 메타파일 형식으로 저장 (0) | 2016.12.06 |
[MFC] 파일 저장 및 읽기(직렬화) (0) | 2016.12.06 |
[MFC] 메뉴 명령 처리 (0) | 2016.12.02 |