Implementazione di aree di lavoro nei controlli List

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

Nota

Le aree di lavoro sono visibili solo quando il controllo elenco è in modalità icona o icona piccola. Tuttavia, tutte le aree di lavoro correnti vengono mantenute se la visualizzazione viene impostata sulla modalità report o elenco.

Le aree di lavoro possono essere usate per visualizzare un bordo vuoto (in alto e/o a destra degli elementi) oppure per visualizzare una barra di scorrimento orizzontale quando normalmente non ne esiste una. Un altro utilizzo comune consiste nel creare più aree di lavoro in cui è possibile spostare o eliminare gli elementi. Con questo metodo, è possibile creare aree in una singola visualizzazione con significati diversi. L'utente potrebbe quindi classificare gli elementi inserendoli in un'area diversa. Un esempio è una visualizzazione di un file system con un'area per i file di lettura/scrittura e un'altra area per i file di sola lettura. Se un elemento di file è stato spostato nell'area di sola lettura, diventa automaticamente di sola lettura. Lo spostamento di un file dall'area di sola lettura nell'area di lettura/scrittura renderebbe il file di lettura/scrittura.

CListCtrl fornisce diverse funzioni membro per la creazione e la gestione delle aree di lavoro nel controllo elenco. GetWorkAreas e SetWorkAreas recuperano e impostano una matrice di CRect oggetti (o RECT strutture), che archivia le aree di lavoro attualmente implementate per il controllo elenco. Inoltre, GetNumberOfWorkAreas recupera il numero corrente di aree di lavoro per il controllo elenco (per impostazione predefinita, zero).

Elementi e aree di lavoro

Quando viene creata un'area di lavoro, gli elementi che si trovano all'interno dell'area di lavoro diventano membri di esso. Analogamente, se un elemento viene spostato in un'area di lavoro, diventa un membro dell'area di lavoro in cui è stato spostato. Se un elemento non si trova all'interno di un'area di lavoro, diventa automaticamente un membro della prima area di lavoro (indice 0). Se si desidera creare un elemento e inserirlo all'interno di un'area di lavoro specifica, sarà necessario creare l'elemento e quindi spostarlo nell'area di lavoro desiderata con una chiamata a SetItemPosition. Il secondo esempio seguente illustra questa tecnica.

L'esempio seguente implementa quattro aree di lavoro (rcWorkAreas), di dimensioni uguali con un bordo a 10 pixel 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 dell'area totale necessaria per visualizzare tutti gli elementi in un'area. Questa stima viene quindi suddivisa in quattro aree e riempita con un bordo largo 5 pixel.

Nell'esempio seguente vengono assegnate le voci di elenco esistenti a ogni gruppo (rcWorkAreas) e viene aggiornata la visualizzazione controllo (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);

Vedi anche

Uso di CListCtrl
Controlli