Condividi tramite


Implementazione di aree di lavoro nei controlli List

Per impostazione predefinita, un controllo elenco sono presenti 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

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

Aree di lavoro possono essere utilizzate per visualizzare un bordo vuoto (a sinistra, in alto e/o a destra degli elementi), o di una barra di scorrimento orizzontale a essere visualizzata 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. L'utente può quindi 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, automaticamente diventa di sola lettura. Lo spostamento di un file dall'area di sola lettura nell'area lettura /scrittura farebbe in lettura/scrittura del file.

CListCtrl fornisce numerose funzioni membro per creare e gestire le aree di lavoro nel controllo elenco. GetWorkAreas e SetWorkAreas recuperare e impostare una matrice di oggetti di CRect o più 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 elenco (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'altra 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, quest'ultimo diventa automaticamente un membro della prima (indice 0) area di lavoro. Se si desidera creare un elemento e selezionare posizionare in un'area di lavoro specifica, è necessario creare l'elemento quindi spostarla nell'area di lavoro desiderata con 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 a l 10 bordo 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'area. La stima quindi viene suddivisa in quattro aree e viene completata con un pixel intero bordo 5.

L'esempio seguente assegna gli elementi di elenco esistenti a ciascun gruppo (rcWorkAreas) e aggiorna 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

Utilizzo di CListCtrl

Concetti

Controlli (MFC)