다음을 통해 공유


TN029: 분할자 창

이 참고 MFC 설명 CSplitterWnd 클래스, 창을 분할 하 고 다른 창 창 조정 관리를 제공 합니다.

분할 스타일

A CSplitterWnd windows 분할의 두 가지 다른 스타일을 지원 합니다.

"정적 분할자"에서 만들어질 때 분할 창 틀을 만듭니다.순서와 창의 개수 변경 되지 않습니다.분할 막대의 다른 창 크기를 조정 하는 데 사용 됩니다.이 스타일을 사용 하는 서로 다른 뷰 클래스가 각 창에 표시할 수 있습니다.Visual C++ 그래픽 편집기 및 Windows 파일 관리자가 분할 스타일을 사용 하는 프로그램의 예입니다.이 스타일의 분할자 창 분할 상자를 사용 하지 않습니다.

"동적 분할자"에서 추가 창은 만들고 사용자 분할 및 분할 취소 새로운 뷰를 파괴 합니다.이 분할 단일 보기를 시작 및 분할 시작 하는 사용자에 대 한 분할 상자를 제공 합니다.한 방향으로 보기를 나누면 분할자 창의 새 뷰 개체를 동적으로 만듭니다.새 창을이 새 view 개체를 나타냅니다.키보드 인터페이스를 사용 하 여 두 방향으로 뷰 분할 분할자 창 세 개의 새 창에 대 한 세 가지 새 뷰 개체를 만듭니다.분할이 활성화 되어 있는 동안 Windows 창 사이의 분할 막대로 분할 상자를 표시 합니다.Windows 사용자 분할을 제거 되지만 원래 보기 유지 분할자 창까지 손상 됨 추가 뷰 개체를 소멸 시킵니다.Microsoft Excel 및 Microsoft Word 동적 분할자 스타일을 사용 하는 응용 프로그램의 예입니다.

두 종류의 분할자 창 만들면 분할자를 관리 하는 열과 행의 최대 수를 지정 해야 합니다.정적 분할자 창은 행과 열을 채우기 위해 생성 됩니다.첫 번째 창 에서만 동적 분할자를 만듭니다 때의 CSplitterWnd 만들어집니다.

창에 대 한 정적 분할자를 지정할 수 있습니다 최대 16 행 16 열입니다.권장 되는 구성은 다음과 같습니다.

  • 1 행 x 2 열의: 일반적으로 서로 다른 창

  • 2 행 x 1 열: 일반적으로 서로 다른 창

  • 2 행 x 2 열의: 일반적으로 유사한 틀

창 동적 분할자를 지정할 수 있는 최대 2 행 2 열의입니다.권장 되는 구성은 다음과 같습니다.

  • 1 행 x 2 열의: 칼럼 형식 데이터에 대 한

  • 2 행 x 1 열: 텍스트 또는 다른 데이터에 대 한

  • 2 행 x 2 열의: 표나 표 데이터 지향

분할 예제

대부분의 MFC 샘플 프로그램 직접 또는 간접적으로 분할 창을 사용 합니다.MFC 일반 샘플 VIEWEX 분할자에 분할자를 배치 하는 방법을 비롯 하 여 정적 분할자의 몇 가지 용도 보여 줍니다.

클래스 마법사를 새 분할자 창 있는 다중 문서 인터페이스 (MDI) 자식 프레임 창 클래스를 만들 수도 있습니다.분할 창에 대 한 자세한 내용은 다중 문서 형식, 뷰 및 프레임 창을.

구현에서 사용 되는 용어

분할 창에 관련 된 용어 목록을 다음과 같습니다.

  • CSplitterWnd:
    모든 창에서 행 또는 열 사이 공유 되는 스크롤 막대 컨트롤 창 분할을 제공 하는 창입니다.행과 열을 0부터 번호가 지정 (행의 첫 번째 창입니다 0, 열 = = 0).

  • 창:
    특정 응용 프로그램 창에는 CSplitterWnd 관리.창을 보통에서 파생 된 개체입니다.의 CView 클래스, 있지만 수 있습니다 CWnd 해당 자식 창 ID를 가진 개체

    사용 하는 CWnd-파생 개체, 전달의 RUNTIME_CLASS 개체의는 CreateView 작동 사용 하 던 것과 CView-클래스를 파생 합니다.클래스를 사용 해야 DECLARE_DYNCREATEIMPLEMENT_DYNCREATE 런타임 시 동적 생성 프레임 워크를 사용 하기 때문에.하지만 많은 양의 코드에 CSplitterWnd 만 한정는 CView 클래스, CObject::IsKindOf 이러한 작업을 수행 하기 전에 항상 사용 됩니다.

  • 분할 막대:
    행과 열 창 사이 배치 되는 컨트롤입니다.열 창의 행의 크기 조정에 사용할 수 있습니다.

  • 분할 상자:
    컨트롤에는 동적 CSplitterWnd 의 창의 새 행 이나 열을 만들 수 있습니다.가로 스크롤 막대의 왼쪽 또는 세로 스크롤 막대의 위쪽 위치입니다.

  • 교차를 분할 합니다.
    세로 분할줄과 가로 분할줄 교차 합니다.동시에 행과 열 창의 크기를 조정 하 여 끌 수 있습니다.

스크롤 막대를 공유

CSplitterWnd 클래스는 공유 된 스크롤 막대를 지원 합니다.이러한 스크롤 막대 컨트롤의 자식인의 CSplitterWnd 및 다른 창과 분할자에 공유 됩니다.

예를 들어, 1 행 x 2 열의 창에 WS_VSCROLL를 만들 때 지정한 수의 CSplitterWnd.Windows는 두 창 사이 공유 되는 특별 한 스크롤 막대 컨트롤을 만듭니다.

[      ][      ][^]
[pane00][pane01][|]
[      ][      ][v]

사용자가 스크롤 막대를 이동 하면 WM_VSCROLL 두 보기 모두에 메시지를 보낼 수 있습니다.어느 보기에서 스크롤 막대 위치를 설정 하는 경우 공유 스크롤 막대를 설정 합니다.

Note 공유 스크롤 막대와 비슷한 뷰 개체 가장 유용 합니다.분할자의 다양 한 종류의 뷰를 혼합 하면 스크롤 위치를 조정 하는 특수 코드를 작성 해야 합니다.모든 CView-파생 클래스를 사용 하 여 CWnd 스크롤 막대 Api가 있는 경우 공유 스크롤 막대를 위임 합니다.CScrollView 구현 된 예를 들어 있는 CView 지원 클래스 공유 스크롤 막대.클래스에서 파생 된 CView, 컨트롤이 아닌 스크롤 막대를 사용 하는 클래스 또는 표준 Windows 구현을 사용 하는 클래스 (예를 들어, CEditView)와 공유 스크롤 막대 기능이 작동 하지 않습니다 CSplitterWnd.

최소 크기

각 행에 대 한 최소 행 높이 있으며 각 열에 대해 최소 열 너비는.이 최소 창 상세히 표시 하기에 너무 작은 임을 보장 합니다.

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

이러한 최소 크기를 사용 하 여 변경할 수 있는 CSplitterWnd::SetRowInfoCSplitterWnd::SetColumnInfo 함수.

실제 vs입니다.이상적인 크기

레이아웃의 분할자 창에 포함 된 프레임의 크기에 따라 달라 집니다.사용자가 포함 된 프레임 크기가 조정 될 때의 CSplitterWnd 재배치 하 고 예상 대로 나타나도록 창을 크기를 조정 합니다.

사용자가 행 높이 열 너비 크기를 수동으로 설정할 수 있습니다 또는 프로그램 이상적인 크기를 사용 하 여 설정할 수 있는 CSplitterWnd 클래스.실제 크기는 이상적 보다 크거나 작을 수 있습니다.Windows 이상적인 크기를 표시할 충분 한 공간이 없으면 나 분할자 창의 아래쪽 또는 오른쪽에 너무 많은 빈 공간이 있는 경우 실제 크기를 조정 합니다.

사용자 지정 컨트롤

사용자 지정된 동작 및 사용자 인터페이스를 제공 하는 많은 함수를 재정의할 수 있습니다.분할자 창의 다양 한 그래픽 구성 요소에 대 한 대체 영상을 제공 하는이 첫 번째 집합을 재정의할 수 있습니다.

  • virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);

  • virtual void OnInvertTracker(const CRect& rect);

공유 스크롤 막대 컨트롤을 만들려면이 함수를 호출 합니다.스크롤 막대 옆에 추가 컨트롤을 만들려면이 무시할 수 있습니다.

  • virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);

이러한 함수 동적 분할자 창 사용 하는 논리를 구현합니다.이러한 고급 분할 논리를 제공 하도록 재정의할 수 있습니다.

  • virtual void DeleteView(int row, int col);

  • virtual BOOL SplitRow(int cyBefore);

  • virtual BOOL SplitColumn(int cxBefore);

  • virtual void DeleteRow(int rowDelete);

  • virtual void DeleteColumn(int colDelete);

CView 기능

CView 클래스에서 다음 상위 수준 명령을 사용 하 여 대리자의 CSplitterWnd 구현 합니다.이 명령은 가상 이므로 표준 CView 전체 구현 해야 CSplitterWnd 구현에 연결할.사용 하는 응용 프로그램에 대 한 CViewCSplitterWnd, CSplitterWnd 구현을 응용 프로그램과 함께 연결 수 없습니다.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    ID_NEXT_PANE 또는 ID_PREV_PANE를 현재 수 있는지 여부를 확인 합니다.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    "창" 또는 "이전 창" 명령을 실행합니다.

  • virtual BOOL DoKeyboardSplit();
    키보드 명령, "창 분할" 일반적으로 분할을 실행 합니다.

참고 항목

기타 리소스

번호 기술 정보

범주별 기술 노트