Share via


Implementare aree di lavoro in controlli elenco

Per impostazione predefinita, un controllo elenco dispone tutti gli elementi in un modo standard della griglia.Tuttavia, un altro metodo è supportato, aree di lavoro, che dispone gli elementi di elenco in gruppi rettangolari.Per un'immagine di un controllo elenco che implementa le aree di lavoro, vedere utilizzo di controlli di visualizzazione elenchi in Windows SDK.

[!NOTA]

Le aree di lavoro sono visibili solo quando il controllo elenco è icone o in modalità piccola icona.Tuttavia, tutte le aree di lavoro corrente vengono gestite se la visualizzazione viene passata alla modalità di elenco o del rapporto.

Le aree di lavoro possono essere utilizzate per visualizzare un bordo vuoto (a sinistra, in alto e/o a destra degli elementi, oppure forzare una barra di scorrimento orizzontale a essere visualizzato quando sono in genere non sarebbe una.Un altro utilizzo comune consiste nella creazione di più aree di lavoro a cui gli elementi possono essere spostati o eliminati.Con questo metodo, è possibile creare aree in un'unica visualizzazione che hanno significati diversi.Sarà quindi possibile classificare gli elementi posizionandoli in un'area diversa.Un esempio è dato da una visualizzazione di un file system con un'area per i file di lettura/scrittura /scritturi e un'altra area per i file di sola lettura.Se un elemento del file è stato trasferito nell'area di sola lettura, viene automaticamente diventa di sola lettura.Lo spostamento di un file dall'area di sola lettura in lettura /scrittura farebbe il lettura/scrittura del file.

CListCtrl fornisce numerose funzioni membro per creare e gestire le aree di lavoro nel controllo elenco.GetWorkAreas e SetWorkAreas il recupero e l'impostazione di una matrice di oggetti di CRect (o di strutture di RECT ), che archiviano le aree di lavoro attualmente implementate per il controllo elenco.Inoltre, GetNumberOfWorkAreas recupera il numero corrente delle aree di lavoro per il controllo list (per impostazione predefinita, zero).

elementi e aree di lavoro

Quando un'area di lavoro viene creata, gli elementi che fanno parte dell'area di lavoro diventano membri.Analogamente, se un elemento viene spostato in un'area di lavoro, diventa un membro dell'area di lavoro in cui è stata spostata.Se un elemento non si trova all'interno di qualsiasi area di lavoro, diventa automaticamente un membro della prima (indice 0) area di lavoro.Se si desidera creare un elemento ed eseguirla posizionare in un'area di lavoro specifica, è necessario creare l'elemento e quindi spostarlo nell'area di lavoro desiderata tramite una chiamata a SetItemPosition.Il secondo esempio seguente viene illustrata questa tecnica.

Nell'esempio seguente viene implementata quattro aree di lavoro (rcWorkAreas), di dimensioni uguale a un pixel-ampio bordo 10 intorno a ogni area di lavoro, in un controllo elenco (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);    

La chiamata a ApproximateViewRect è stata effettuata per ottenere una stima della superficie totale necessaria per visualizzare tutti gli elementi in un'unica area.La stima quindi viene suddivisa in quattro aree e applicata la spaziatura interna con un pixel-ampio bordo 5.

L'esempio seguente assegna gli elementi dell'elenco esistenti a ciascun gruppo (rcWorkAreas) e aggiornare la visualizzazione controlli (m_WorkAreaListCtrl) per completare l'effetto.

// 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);

Vedere anche

Riferimenti

Utilizzando CListCtrl

Concetti

Controlli (MFC)