본문 바로가기

Programming/MFC

첫번째 이야기 : CSplitterWnd Class에 대해서...

MFC Library Reference

CSplitterWnd

 

이 문서는 VS 2005 SP1을 위해서 업데이트 되었다.

 

여러개의 pane을 갖는 윈도우인 분할 윈도우의 기능을 제공한다.

 

class CSplitterWnd : public CWnd

 

Remarks

pane은 일반적으로 CView로부터 상속받은 어플리케이션 종속적인 객체이지만 적절한 자식 윈도우 ID를 가진 CWnd 객체라면 어떠한 것이라도 가능하다.

 

CSplitterWnd 객체는 일반적으로 부모 CFrameWnd 또는 CMDIChildWnd 객체에 임베디드된다. 다음의 절차대로 CSplitterWnd 객체를 생성한다.

 

1. 부모 프레임에 CSplitterWnd 멤버 변수를 삽입한다.

2. 부모 프레임의 CFrameWnd::OnCreateClient 멤버 함수를 오버라이드한다.

3. 상속받은 OnCreateClient로부터, CSplitterWnd의 Create 또는 CreateStatic 멤버 함수를 호출한

   다.

 

동적 분할 윈도우를 생성하기 위해서 Crate 멤버 함수를 호출한다. 동적인 분할 윈도우는 전형적으로 동일한 document의 여러개의 개별적인 pane, 뷰를 생성하고 스크롤하는데 사용된다. 프레임워크는 자동으로 splitter를 위한 초기화 pane을 생성한다; 그리고 프레임워크는 사용자의 콘트롤에 따라서 추가적인 pane을 생성하고, 사이즈 조절하고 해제 한다.

 

Create를 호출할 때, 전체화면으로 출력하기에는 pane들의 크기가 너무 작을 때 최소 높이와 넓이를 지정한다. Create를 호출하고 나서 SetColumnInfo와 setRowInfo 멤버 함수를 호출함으로써 이들의 최소값을 조절할 수 있다.

 

또한 SetColumnInfo와 SetRowInfo 멤버 함수를 사용해서 ideal 높이와 넓이를 설정할 수 있다. 프레임워크가 분할된 윈도우를 표시할 때 처음에는 부모 프레임을 그리고 난후 분할된 윈도우를 그린다. 다음에 분할된 윈도우의 클라이언트 영역의 왼쪽 상단에서 아래쪽 하단까지의 ideal 크기에 따라서 column과 row의 pane를 배치한다.

 

동적 분할 윈도우에서 모든 pane은 동일한 클래스의 것이어야 한다. 동적인 분할 윈도우를 지원하는 친숙한 어플리케이션은 MS Word와 MS Excel이다.

 

정적인 분할 위도우를 생성하기 위해서는 CreateStatic 멤버 함수를 사용한다. 사용자는 정적인 분할 윈도우에서 pane의 크기만을 변경할 수 있다 갯수나 순서는 변경할 수 없다.

 

정적인 분할 윈도우를 생성할 때 모든 정적 splitter의 pane을 모두 생성해야 한다. 부모 프레임의 OnCreateClient 멤버 함수가 리턴되기 전에 모든 pane을 생성해야 한다, 그렇지 않으면 프레임워크는 윈도우를 정확하게 표시하지 않을 것이다.

 

CreateStatic 멤버 함수는 자동으로 정적 분할 윈도우의 최소 row와 column을 0으로 초기화한다. Create를 호출하고 난 후에, SetColumnInfo와 setRowInfo를 호출함으로서 이런 값들을 조절할 수 있다. 원하는 ideal pane 크기를 가르키기 위해 CreateStatic을 호출한 후에 SetColumnInfo와 SetRowInfo를 사용할 수 있다.

 

정적인 분할 윈도우의 개별적인 pane은 종종 다른 클래스에 속하기도 한다. 정적인 분할 윈도우의 예는 그래픽 에디터와 윈도우 파일 매니저를 보라.

 

분할된 윈도우는 특별한 스크롤 바(가지고 있는 스크롤바와 분리된)를 지원한다. 이런 스크롤바는 CSplitterWnd 객체의 자손들이고 pane과 공유된다.

 

분할 윈도우를 생성할 때 이러한 특별한 스크롤바를 생성한다. 예를 들어, CSplitterWnd가 하나의 row와 두개의 column을 가지고 있다면 WS_VSCROLL 스타일이 두개의 pane에 의해 공유되는 수직 스크롤바를 표시할 것이다. 사용자가 스크롤바를 이동하면, WM_VSCROLL 메시지가 두개의 pane으로 보내질 것이다. pane이 scroll-bar 위치를 설정하면 공유된 스크롤바가 설정된다.

 

분할 윈도우에 대한 자세한 정보는 다음으로 보라:

. Technical Note 29

. Knowledge Base article Q262024: HOWTO: Use CPropertySheet as a Child of CSplitterWnd

 

동적인 분할 윈도우를 생성하는 법에 대한 자세한 정보는 다음을 보라:

. MFC sample Scribble

. MFC sample VIEWEX

 

Requirements

  Header : afxext.h

 



CSplitterWnd::RecalcLayout


분할된 윈도우의 행 또는 열의 사이즈가 변경되었을 때 호출한다.


virtual void RecalcLayout();


Remarks

SetRowInfo와 SetColumnInfo 함수를 사용해서 row와 column의 크기를 조정한 후에 분할된 윈도우를 정확하게 출력하기 위해 이 함수를 호출한다. 분할 윈도우가 보여지기 전에 프로세스를 생성하는 단계에서 row와 column 사이즈를 변경했다면 이 멤버 함수를 호출할 필요가 없다.


사용자가 분할된 윈도우의 사이즈를 변경했거나 분할된 부분을 이동할 때마다 프레임워크는 이 멤버 함수를 호출한다.