Come usare le aree di lavoro di Visualizzazione elenco

In questo argomento viene illustrato come usare le aree di lavoro della visualizzazione elenco. Le aree di lavoro sono aree virtuali rettangolari che possono essere utilizzate per disporre gli elementi in un controllo visualizzazione elenco. Un'area di lavoro non è una finestra e non può avere un bordo visibile. Per impostazione predefinita, il controllo visualizzazione elenco non dispone di aree di lavoro. Creando un'area di lavoro, è possibile creare un bordo vuoto a sinistra, in alto o a destra degli elementi oppure fare in modo che una barra di scorrimento orizzontale venga visualizzata quando normalmente non ne esiste una.

Informazioni importanti

Tecnologie

Prerequisiti

  • C/C++
  • Programmazione dell'interfaccia utente di Windows

Istruzioni

Creare un'area di lavoro

L'esempio di codice C++ seguente illustra come creare un'area di lavoro con un bordo vuoto di 25 pixel sui lati superiore, sinistro e destro.

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

Creare più aree di lavoro

Nell'esempio di codice C++ seguente viene illustrato come creare due aree di lavoro in un controllo . Ogni area di lavoro utilizza circa la metà dell'area client ed è circondata da un bordo vuoto di 25 pixel.

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

Determinare l'area di lavoro a cui appartiene un elemento

Un modo per determinare quale area di lavoro appartiene un elemento consiste nell'eseguire le operazioni seguenti:

  • Recuperare l'elenco delle coordinate di tutte le aree di lavoro nel controllo visualizzazione elenco.
  • Recuperare le coordinate dell'elemento.
  • Determinare se le coordinate dell'elemento si trovano all'interno delle coordinate di una delle aree di lavoro.

La funzione definita dall'applicazione nell'esempio di codice C++ seguente restituisce l'indice dell'area di lavoro a cui appartiene l'elemento. Se la funzione ha esito negativo, restituisce -1. Se la funzione ha esito positivo, ma l'elemento non si trova all'interno di nessuna delle aree di lavoro, la funzione restituisce 0, perché tutti gli elementi che non si trovano all'interno di un'area di lavoro diventano automaticamente un membro dell'area di lavoro zero.

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

Informazioni di riferimento sul controllo List-View

Informazioni sui controlli visualizzazione elenco

Uso dei controlli visualizzazione elenco