다음을 통해 공유


리스트 컨트롤의 작업 영역 구현

기본적으로 목록 컨트롤은 모든 항목을 표준 그리드 방식으로 정렬합니다. 그러나 목록 항목을 사각형 그룹으로 정렬하는 작업 영역이라는 또 다른 메서드가 지원됩니다. 작업 영역을 구현하는 목록 컨트롤의 이미지는 Windows SDK에서 목록 보기 컨트롤 사용을 참조하세요.

참고 항목

작업 영역은 목록 컨트롤이 아이콘 또는 작은 아이콘 모드에 있는 경우에만 표시됩니다. 그러나 보기가 보고서 또는 목록 모드로 전환되면 현재 작업 영역이 기본.

작업 영역을 사용하여 빈 테두리(항목의 왼쪽, 위쪽 및/또는 오른쪽)를 표시하거나 일반적으로 테두리가 없을 때 가로 스크롤 막대가 표시되도록 할 수 있습니다. 또 다른 일반적인 용도는 항목을 이동하거나 삭제할 수 있는 여러 작업 영역을 만드는 것입니다. 이 메서드를 사용하면 의미가 다른 단일 보기에서 영역을 만들 수 있습니다. 그러면 사용자가 항목을 다른 영역에 배치하여 분류할 수 있습니다. 예를 들어 읽기/쓰기 파일 영역이 있는 파일 시스템의 보기와 읽기 전용 파일의 다른 영역이 있습니다. 파일 항목이 읽기 전용 영역으로 이동되면 자동으로 읽기 전용이 됩니다. 읽기 전용 영역에서 읽기/쓰기 영역으로 파일을 이동하면 파일이 읽기/쓰기가 가능합니다.

CListCtrl 에서는 목록 컨트롤에서 작업 영역을 만들고 관리하기 위한 여러 멤버 함수를 제공합니다. GetWorkAreasSetWorkAreas는 목록 컨트롤에 대해 현재 구현된 작업 영역을 저장하는 개체(또는 RECT 구조체)의 CRect 배열을 검색하고 설정합니다. 또한 GetNumberOfWorkAreas 는 목록 컨트롤의 현재 작업 영역 수를 검색합니다(기본적으로 0).

항목 및 작업 영역

작업 영역을 만들면 작업 영역 내에 있는 항목이 해당 영역의 구성원이 됩니다. 마찬가지로 항목이 작업 영역으로 이동되면 항목이 이동된 작업 영역의 멤버가 됩니다. 항목이 작업 영역 내에 있지 않으면 자동으로 첫 번째(인덱스 0) 작업 영역의 멤버가 됩니다. 항목을 만들고 특정 작업 영역 내에 배치하려는 경우 항목을 만든 다음 SetItemPosition 호출을 사용하여 원하는 작업 영역으로 이동해야 합니다. 아래 두 번째 예제에서는 이 기술을 보여 줍니다.

다음 예제에서는 목록 컨트롤(rcWorkAreas)에서 각 작업 영역 주위에 10픽셀 너비의 테두리가 있는 동일한 크기의 4개의 작업 영역(m_WorkAreaListCtrl)을 구현합니다.

CSize size;
size = m_WorkAreaListCtrl.ApproximateViewRect();
size.cx += 100;
size.cy += 100;

CRect rcWorkAreas[4];
rcWorkAreas[0].SetRect(0, 0, (size.cx / 2) - 5, (size.cy / 2) - 5);
rcWorkAreas[1].SetRect((size.cx / 2) + 5, 0, size.cx, (size.cy / 2) - 5);
rcWorkAreas[2].SetRect(0, (size.cy / 2) + 5, (size.cx / 2) - 5, size.cy);
rcWorkAreas[3].SetRect((size.cx / 2) + 5, (size.cy / 2) + 5, size.cx, size.cy);

//set work areas
m_WorkAreaListCtrl.SetWorkAreas(4, rcWorkAreas);

한 지역의 모든 항목을 표시하는 데 필요한 총 영역을 예상하기 위해 ApproximateViewRect를 호출했습니다. 이 추정치는 4개의 영역으로 나뉘어 5픽셀 너비의 테두리로 채워집니다.

다음 예제에서는 각 그룹(rcWorkAreas)에 기존 목록 항목을 할당하고 컨트롤 뷰(m_WorkAreaListCtrl)를 새로 고쳐 효과를 완료합니다.

// set insertion points for each work area
CPoint rgptWork[4];
for (int i = 0; i < 4; i++)
{
   rgptWork[i].x = rcWorkAreas[i].left + 10;
   rgptWork[i].y = rcWorkAreas[i].top + 10;
}
// now move all the items to the different quadrants
for (int i = 0; i < 20; i++)
{
   m_WorkAreaListCtrl.SetItemPosition(i, rgptWork[i % 4]);
}

// force the control to rearrange the shuffled items
m_WorkAreaListCtrl.Arrange(LVA_DEFAULT);

참고 항목

CListCtrl 사용
컨트롤