Compartir a través de


Uso de áreas de trabajo de List-View

En este tema se muestra cómo trabajar con áreas de trabajo de vista de lista. Las áreas de trabajo son áreas virtuales rectangulares que se pueden usar para organizar elementos en un control de vista de lista. Un área de trabajo no es una ventana y no puede tener un borde visible. De forma predeterminada, el control de vista de lista no tiene áreas de trabajo. Al crear un área de trabajo, puede crear un borde vacío a la izquierda, la parte superior o la derecha de los elementos o hacer que se muestre una barra de desplazamiento horizontal cuando normalmente no habría una.

Lo que necesita saber

Tecnologías

Requisitos previos

  • C/C++
  • Programación de la interfaz de usuario de Windows

Instrucciones

Crear un área de trabajo

En el ejemplo de código de C++ siguiente se muestra cómo crear un área de trabajo con un borde vacío de 25 píxeles en sus lados superior, izquierdo y derecho.

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

Crear varias áreas de trabajo

En el ejemplo de código de C++ siguiente se muestra cómo crear dos áreas de trabajo en un control . Cada área de trabajo usa aproximadamente la mitad del área de cliente y está rodeada por un borde vacío de 25 píxeles.

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

Determinar el área de trabajo a la que pertenece un elemento

Una manera de determinar qué área de trabajo pertenece un elemento es hacer lo siguiente:

  • Recupere la lista de coordenadas de todas las áreas de trabajo del control de vista de lista.
  • Recupere las coordenadas del elemento.
  • Determine si las coordenadas del elemento se encuentran dentro de las coordenadas de una de las áreas de trabajo.

La función definida por la aplicación en el siguiente ejemplo de código de C++ devuelve el índice del área de trabajo a la que pertenece el elemento. Si se produce un error en la función, devuelve –1. Si la función se ejecuta correctamente, pero el elemento no está dentro de ninguna de las áreas de trabajo, la función devuelve 0, porque todos los elementos que no están dentro de un área de trabajo se convierten automáticamente en un miembro del área de trabajo cero.

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

Referencia de control de vista de lista

Acerca de los controles de List-View

Uso de controles de List-View