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 |