본문 바로가기
New/MFC 윈도우 프로그래밍

5. 도큐먼트 파일 입출력 및 템플릿 (2)

by onenewkong 2024. 12. 29.

5.3 SDI 템플릿

  • SDI란 뷰 클래스, 도큐먼트 클래스, 메인프레임 클래스가 하나의 템플릿으로 구성되어진 것을 말함
  • 하나의 도큐먼트를 갖는 프로그램
  • 도큐먼트 - 뷰 구조에서 도큐먼트는 디스크에서 데이터를 읽고 저장하는 기능을 함
  • SDI 형태의 프로그램으로는 메모장이나 그림판과 같은 것들을 들 수 있음
  • SDI에서 각 클래스의 인스턴스를 얻어오는 방법
    • 클래스의 인스턴스를 얻으면 그 인스턴스 값으로 얻어온 클래스의 멤버 변수나 멤버 함수를 이용할 수 있는 것

1) 애플리케이션 클래스의 인스턴스를 얻는 방법

  • 애플리케이션 클래스의 포인터 변수를 생성한 다음 AfxGetApp()이라는 함수를 이용하면 프로그램의 어디에서나 이 클래스의 인스턴스를 얻을 수 있음

2) 메인 프레임 클래스의 인스턴스를 얻는 방법

  • 메뉴와 툴바, 상태 표시줄 등의 상태를 바꾸기 위해서는 메인 프레임 클래스에 접근해야만 함
  • 메인 프레임 클래스의 인스턴스를 얻을 때는 AfxGetMainWnd() 함수를 이용하고 형 변환을 함

3) 뷰 클래스의 인스턴스를 얻는 방법

  • 뷰 클래스의 포인터를 얻기 위해서는 GetActiveView() 함수를 사용함
  • 이 함수는 메인 프레임 클래스의 멤버 함수임
  • 따라서 이 함수를 사용하기 위해서는 먼저 메인 프레임 클래스의 인스턴스를 얻고 이 클래스의 멤버 함수인 GetActiveView()를 사용하는 것

4) 도큐먼트 클래스의 인스턴스를 얻는 방법

  • 도큐먼트 클래스의 인스턴스를 얻는 것은 사용되는 함수가 GetActiveDocument()라는 것 외에는 뷰 클래스의 인스턴스를 얻는 방법과 같음

 

5.4 MDI 템플릿

  • MDI는 한 프로그램에서 여러 개의 문서 객체가 생성될 수 있음

SDI와 MDI의 차이점

  • SDI와 MDI 프로그램은 CWinApp 클래스를 상속받은 애플리케이션 클래스에서 템플릿을 등록하게 됨
  • SDI의 경우 CSingleDocTemplate 이라는 클래스로 템플릿을 등록함
  • MDI의 경우 CMultiDocTemplate 이라는 클래스로 템플릿을 등록함
  • MDI는 메인 프레임 클래스와 자식 프레임 클래스가 존재하기 때문에 각각의 리소스가 따로 정의됨

MDI에서 각 클래스의 인스턴스를 얻는 방법

  • 클래스의 인스턴스를 얻으면 그 인스턴스 값으로 얻어온 클래스의 멤버 변수나 멤버 함수를 이용할 수 있는 것임

1) 애플리케이션 클래스의 인스턴스를 얻는 방법

  • SDI에서 애플리케이션 클래스의 인스턴스를 얻을 때와 같은 방법으로 AfxGetApp() 함수를 이용하여 얻음

2) 메인 프레임 클래스의 인스턴스를 얻는 방법

  • MDI에서 메인 프레임 클래스의 인스턴스를 얻는 방법 역시 SDI 형태와 같은 방법으로 AfxGetMainWnd() 함수를 이용함

3) 자식 프레임 클래스의 인스턴스를 얻는 방법

  • SDI 형태와 다른 점으로 자식 프레임 클래스의 인스턴스를 얻기 위해 메인 프레임의 멤버 함수인 GetActiveFrame() 함수를 이용함

4) 뷰 클래스의 인스턴스를 얻는 방법

  • MDI에서 뷰 클래스의 인스턴스를 얻을 때는 SDI와 마찬가지로 GetActiveView() 함수를 이용함
  • 자식 프레임이 뷰와 도큐먼트를 감싸고 있으므로 자식 프레임의 멤버 함수를 이용해야 함

5) 도큐먼트 클래스의 인스턴스를 얻는 방법

  • 도큐먼트의 인스턴스를 얻는 방법은 함수가 GetActiveDocument()라는 것 외에는 뷰 클래스와 같음

 

실습

 

* [새 창]과 [새로 만들기]의 차이점

[창] 메뉴에서 [새 창] 항목을 선택하면 문서가 하나 생겨나는데 이 문서는 현재 활성화되어 있는 문서의 도큐먼트를 공유하게 되는 것이므로 처음 [창] 메뉴의 [새 창] 항목을 선택했을 때 문서가 생겨나면서 공유하는 도큐먼트의 데이터값을 이용하는 것이다. 그러나 [파일] 메뉴에서 [새로 만들기] 항목을 선택하면 도큐먼트를 공유하는 것이 아니라 또 다른 도큐먼트 객체가 생성되는 것이다. 그래서 [파일] 메뉴으 [새로 만들기] 항목을 선택하면 새로운 도큐먼트를 사용하여 아무런 데이터도 없는 빈 문서가 생겨난다.

'New > MFC 윈도우 프로그래밍' 카테고리의 다른 글

5. 도큐먼트 파일 입출력 및 템플릿 (1)  (0) 2024.12.19
4. 대화상자 (2)  (1) 2024.12.15
4. 대화상자 (1)  (0) 2024.12.15
3. 메시지 처리 (3)  (0) 2024.12.14
3. 메시지 처리 (2)  (0) 2024.12.11