다음을 통해 공유


List-View 작업 영역을 사용하는 방법

이 항목에서는 목록 보기 작업 영역을 사용하는 방법을 보여 줍니다. 작업 영역은 목록 보기 컨트롤에서 항목을 정렬하는 데 사용할 수 있는 사각형 가상 영역입니다. 작업 영역은 창이 아니고 표시되는 테두리를 가질 수 없습니다. 기본적으로 목록 보기 컨트롤에는 작업 영역이 없습니다. 작업 영역을 만들면 항목의 왼쪽, 위쪽 또는 오른쪽에 빈 테두리를 만들거나 일반적으로 테두리가 없을 때 가로 스크롤 막대가 표시되도록 할 수 있습니다.

알아야 할 사항

기술

필수 구성 요소

  • C/C++
  • Windows 사용자 인터페이스 프로그래밍

지시

작업 영역 만들기

다음 C++ 코드 예제에서는 위쪽, 왼쪽 및 오른쪽에 25픽셀 빈 테두리가 있는 작업 영역을 만드는 방법을 보여 줍니다.

void SetWorkAreas1(HWND hWndListView)
{
    #define  EMPTY_SPACE   25
    
    RECT  rcClient;
    
    GetClientRect(hWndListView, &rcClient);
    
    rcClient.left  +=  EMPTY_SPACE;
    rcClient.top   +=  EMPTY_SPACE;
    rcClient.right -= (EMPTY_SPACE * 2);
    
    SendMessage(hWndListView, LVM_SETWORKAREAS, 1, (LPARAM)&rcClient);

    return;
}

여러 작업 영역 만들기

다음 C++ 코드 예제에서는 컨트롤에서 두 개의 작업 영역을 만드는 방법을 보여 줍니다. 각 작업 영역은 클라이언트 영역의 약 절반을 사용하며 25픽셀의 빈 테두리로 둘러싸여 있습니다.

void SetWorkAreas2(HWND hWndListView)
{
    #define  EMPTY_SPACE   25
    
    RECT  rcClient;
    RECT  rcWork[2];
    
    GetClientRect(hWndListView, &rcClient);
    
    rcWork[0].left   = rcClient.left +      EMPTY_SPACE;
    rcWork[0].top    = rcClient.top +       EMPTY_SPACE;
    rcWork[0].right  = (rcClient.right/2) - EMPTY_SPACE;
    rcWork[0].bottom = rcClient.bottom;
    
    rcWork[1].left   = (rcClient.right/2) + EMPTY_SPACE;
    rcWork[1].top    = rcClient.top +       EMPTY_SPACE;
    rcWork[1].right  = rcClient.right -     EMPTY_SPACE;
    rcWork[1].bottom = rcClient.bottom;
    
    SendMessage(hWndListView, LVM_SETWORKAREAS, 2, (LPARAM)rcWork);

    return;
}

항목이 속한 작업 영역 확인

항목이 속한 작업 영역을 확인하는 한 가지 방법은 다음을 수행하는 것입니다.

  • 목록 보기 컨트롤에서 모든 작업 영역의 좌표 목록을 검색합니다.
  • 항목의 좌표를 검색합니다.
  • 항목 좌표가 작업 영역 중 하나의 좌표 내에 있는지 여부를 확인합니다.

다음 C++ 코드 예제의 애플리케이션 정의 함수는 항목이 속한 작업 영역의 인덱스를 반환합니다. 함수가 실패하면 -1을 반환합니다. 함수가 성공하지만 항목이 작업 영역 내에 없는 경우 작업 영역 내에 없는 모든 항목이 자동으로 작업 영역 0의 멤버가 되므로 함수는 0을 반환합니다.

int GetItemWorkingArea(HWND hWndListView, int iItem)
{
    UINT     uWorkAreas = 0;
    int      nReturn = -1;
    LPRECT   pRects;
    POINT    pt;
    
    if(!ListView_GetItemPosition(hWndListView, iItem, &pt))
        return nReturn;
    
    ListView_GetNumberOfWorkAreas(hWndListView, &uWorkAreas);
    
    if(uWorkAreas)
    {
        pRects = (LPRECT)GlobalAlloc(GPTR, sizeof(RECT) * uWorkAreas);
        
        if(pRects)
        {
            UINT  i;
            nReturn = 0;
    
            ListView_GetWorkAreas(hWndListView, uWorkAreas, pRects);
          
            for(i = 0; i < uWorkAreas; i++)
            {
                if(PtInRect((pRects + i), pt))
                {
                    nReturn = i;
                    break;
                }
            }
            GlobalFree((HGLOBAL)pRects);
        }
    }
    return nReturn;
}

List-View 제어 참조

List-View 컨트롤에 대하여

List-View 컨트롤 사용