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