TN029: 분할 창

이 노트 창 분할을 제공 하 고 다른 창을 크기를 관리 하는 데 사용 하는 MFC CSplitterWnd 클래스 설명。

메모nbsp;??유효한 ID 범위 Id의 사용에 관한 기술 노트 20 읽을 수 반드시(&N)。

분할 스타일

CSplitterWnd 창 분할의 두 가지 서로 다른 스타일 지원。

"정적 분할" 창이 분할자 창이 생성 되 고 순서와 창 수 결코 변화 하는 때 만들어집니다. 다른 창 크기를 조정 하려면 분할 막대를 사용 하 고 다른 창이 일반적으로 다른 뷰 클래스의. Visual c + + 그래픽 편집기 및 Windows 파일 관리자가 분할 스타일을 사용 하는 프로그램의 예입니다. 분할 상자 분할자의이 작풍에 의해 사용 되지 않습니다.

"동적 분할자" 추가 창 생성 되며 사용자 분할 및 유엔 분할 새로운 보기로 파괴. 이 분할 단일 보기와 함께 시작 하 고 분할 상자 분할을 시작 하기 위해 제공 됩니다. 보기를 한 방향으로 분할 하는 경우 추가 뷰 개체를 나타내는 새 창 동적으로 생성 됩니다. 보기 분할 두 방향에서 (키보드 인터페이스 가능), 3 개의 새로운 보기를 나타내는 세 개의 새로운 창이 생성 됩니다. 분할 활성화 되 면 분할 상자 창 사이 분할 막대도 그려집니다. 추가 보기 분할을 제거 하는 경우 개체를 파괴 하지만 원래 보기 (행 0, 열 0) 자체 분할 창이 소멸 될 때까지 유지 됩니다. Microsoft Excel 또는 Microsoft Word는 동적 분할자 스타일의 예。

스플리터 윈도우의 두 종류를 만들 때 분할 관리 하는 행과 열의 최대 수를 지정 해야 합니다. 정적 분할에 대 한 창은 모든 행과 열을 채우기 위해 생성 되어야 합니다. 자동 동적 분할자에 대 한 첫 번째 창으로 만들어집니다 CSplitterWnd 만들어질 때。

창 정적 분할자에 대 한 지정할 수 있는 최대 수는 16 행 16 열. 권장 구성이:

창 동적 분할자에 대 한 지정할 수 있는 최대 수는 2 행 2 열입니다. 권장 구성이:

분할 예제

직접 또는 간접적으로 MFC 샘플 프로그램의 많은 분할자 창을 사용합니다. MFC 자습서의 4 단계 를 CScribView 여러 창으로 분할 하는 동적 분할자 창을 추가 낙서 . 이 단계에서 보는 바와 같이, 새로운 분할 프레임 창을 쉽습니다 Classwizard의 클래스 추가 기능 추가. 이 예제는 기본적으로 동적 분할자 창。

MFC 일반 샘플 VIEWEX 스플리터를 분할 하는 방법을 비롯 하 여 정적 분할자의 몇 가지 용도 보여 줍니다.

Classwizard는 또한 만들 새 다중 문서 인터페이스 (MDI) 자식 프레임 창 클래스 분할 창을 포함 하는. 분할 창 Visual c + + 프로그래머 가이드 에서 참조 하십시오。

구현에서 사용 되는 용어

CSplitterWnd 및 관련된 개체의 부품의 용어。

CSplitterWnd:

이것은 창 분할 컨트롤을 제공 하는 창 및 행 또는 열에 모든 창 간에 공유 되는 스크롤 막대. 행과 열은 0부터 번호가 지정 [즉, 첫 번째 창에는 행 = 0, 열 = 0]

창:

CSplitterWnd에 의해 관리 되는 응용 프로그램 특정 창입니다. 한 창은 보통 CView-파생 개체를 있지만 실제로 모든 CWnd 개체를 적절 한 자식 창 ID.nbsp 될 수 있습니다(&N);

CView 파생 된 class.nbsp;를 사용 하는 경우와 마찬가지로 파생 클래스를 이렇게 하려면 CWnd 의 RUNTIME_CLASS 를 전달 하기만 하면 DECLARE_DYNCREATE 및 IMPLEMENT_DYNCREATE 클래스를 사용 해야 합니다-프레임 워크는 런타임에 동적 생성을 사용 합니다. CView CSplitterWnd에서 특정 코드를 많이 있지만, 이러한 작업을 수행 하기 전에 CObject::IsKindOf 항상 사용 됩니다.? 물론, 그것은 훨씬 쉽게 CWnd 파생 클래스 보다 CSplitterWnd CView 파생 클래스와 함께 사용할 수(&N)。

분할 막대:

패널의 행과 열 사이 배치 되는 컨트롤입니다. 창 열 또는 행 크기 조정에 사용할 수 있습니다.

분할 상자:

또는 동적 CSplitterWnd에 있는 가로 스크롤 막대의 왼쪽에 세로 스크롤 막대의 상단에 작은 컨트롤입니다. 창의 새 행 이나 열을 만드는 데。

분할 교차로:

세로 분할줄과 세로 분할줄 교차. 동시에 행과 열 창 크기를 조정 하려면 끌 수 있습니다.

공유 스크롤 막대

CSplitterWnd 클래스는 또한 공유 스크롤 막대를 지원합니다. 이러한 스크롤 막대 컨트롤 CSplitterWnd 이들이 하 고 분할자의 다른 창으로 공유。

예를 들어, 1 행 x 2 열의 창에서 CSplitterWnd를 만들 때 WS_VSCROLL 을 지정할 수 있습니다. 특별 한 스크롤 막대 컨트롤 생성 됩니다 두 창 간에 공유 되는。

[nbsp;???? ][????? ][^]
[pane00][pane01][|]
[????? ][????? ][v](&N)

스크롤 막대를 이동할 때 WM_VSCROLL 메시지 모두 보기에 보내질 것 이다. 보기 스크롤 막대 위치를 설정 하는 경우 공유 스크롤 막대 설정 됩니다.

Note 공유 스크롤 막대는 동적 또는 정적 분할, 분할 비슷한 보기 개체와 가장 유용 합니다. 스플리터에 다른 종류의 보기를 혼합 하는 경우에 그들의 스크롤 위치를 조정 하는 데 특별 한 코드를 작성할 수 있습니다 해야 합니다. 모든 CView-존재 하는 경우 Api 공유 스크롤 막대를 위임할 것 이다 CWnd 스크롤 막대를 사용 하는 클래스를 파생 합니다. CScrollView 구현은 하나의 예 CView 클래스의 지원 스크롤바를 공유 합니다. 비-CView 파생 클래스, noncontrol 스크롤 막대를 사용 하는 클래스 또는 클래스를 사용 하는 표준 Windows CSplitterWnd 공유 스크롤 막대 기능 구현 (예를 들어, CEditView)이 작동 하지 것입니다.

최소 크기

각 행에 대 한 최소 행 높이 이며 마찬가지로 각 열에 대해 최소 열 너비. 이 최소 창 완전 한 세부 사항에 표시 될 작은 규모 결정 하는 데 사용 됩니다.

정적 분할 창에 대 한 초기 최소 행 높이 및 열 너비는 0입니다. 동적 분할 창에 대 한 초기 최소 행 높이 열 너비를 CSplitterWnd::Create 함수를 sizeMin 매개 변수에 의해 설정。

SetRowInfo 및 SetColumnInfo Api와 함께 이러한 최소 크기를 변경할 수 있습니다.

이상적인 크기 대 실제

분할자 창의 창 레이아웃 (이 차례로 CSplitterWnd크기가 조정 됩니다 포함 된 프레임의 크기에 따라 달라 집니다. CSplitterWnd 위치로 이동 하 고 그렇게 그들은 가능한 한 이상적에 맞게 창 크기를 조정)。

행 높이 및 열 너비 크기를 설정 사용자에 의해 또는 CSplitterWnd API를 통해 이상적인 크기를 나타냅니다. 실제 크기 (해당 되는 경우 이상적인 크기는 창 수 있도록 공간이 충분 하지 않은) 그 이상적인 크기 보다 작게 또는 수 이상적인 크기 보다 큰 (해당 되는 경우 해당 창의 오른쪽 또는 분할 창의 아래쪽 왼쪽 빈 공간을 채우려면 더 크게 만들 수 있어야 합니다)。

보호 된 인터페이스

다음 일부 기능 및이 클래스의 사용자 인터페이스를 사용자 지정 하려면 CSplitterWnd 의 고급 사용자가 사용할 수 있는 분할 창 구현 overridables 설명 합니다. 이러한 Api는 공식적으로 문서화 하 고 MFC의 향후 버전에서 변경 될 수 있습니다. 이러한 구현 Api에 대 한 자세한 내용은 구현 소스 코드를 참조 하십시오。

분할 막대, 상자 및 추적기 그리기:

 enum ESplitType nbsp;? {splitBox, splitBar, splitIntersection, splitBorder};
가상 void OnDrawSplitter (CDC * pDC, ESplitType nType const CRect & rect);
가상 void OnInvertTracker (const CRect & rect)

스플리터 윈도우의 다양 한 그래픽 구성 요소에 대 한 대체 이미지를 제공 하기 위해 이러한 가상 함수를 재정의할 수 있습니다. 기본 이미지는 Windows 용 Microsoft Works에서 splitter와 비슷합니다: 분할 막대의 교차만 함께 혼합 됩니다. 이미지는 프레임 워크 (미래) 운영 체제의 셸에서 영상을 일치 하기 위해서는 Windows 4.0-감지 하는 경우에 다르다。

컨트롤 및 보기 만들기:

가상 BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)

이 공유 스크롤 막대 컨트롤을 만들기 위해 호출 됩니다. 스크롤 막대 옆에 추가 컨트롤을 포함 하도록 재정의할 수 있습니다. 기본 동작은 단지 정상적인 창 스크롤 막대 컨트롤을 만들려면。

가상 void DeleteView (int 행, int 열);
가상 BOOL SplitRow(int cyBefore);
가상 BOOL SplitColumn(int cxBefore);
가상 void DeleteRow (int 행);
가상 void DeleteColumn (int 행)

이러한 함수 (즉, 경우 분할자 창 SPLS_DYNAMIC_SPLIT 스타일) 동적 분할자 창의 논리를 구현 하 라고 합니다. 그들은 지정할 수 있습니다, 함께 가상 함수 CreateView, 더 많은 고급 동적 분할자를 구현 하려면。

CSplitterWnd 구현에 위임할 CView 클래스에 의해 사용 되는 높은 수준의 명령은 다음과 같습니다. 그들은 가상는 표준 CView 구현 전체 CSplitterWnd 구현에 연결 될 필요 하지 것입니다. CView 하지만 CSplitterWnd를 사용 하는 응용 프로그램에 대해 CSplitterWnd 구현 하지 연결 됩니다 응용 프로그램。

가상 BOOL CanActivateNext(BOOL bPrev = FALSE);

현재 가능한 "다음 창" 또는 "이전 창" 명령 인지 확인。

가상 void ActivateNext (BOOL bPrev = FALSE);

"다음 창" 또는 "이전 창" 명령 수행。

가상 BOOL DoKeyboardSplit();

키보드 명령, 일반적으로 "창 분할" 분할을 수행합니다。

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index