다음을 통해 공유


목록 보기 작업 영역을 사용하는 방법

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

알아야 하는 작업

기술

필수 구성 요소

  • 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;
}

목록 뷰 컨트롤 참조

목록 뷰 컨트롤 정보

목록 뷰 컨트롤 사용