Jak používat pracovní oblasti List-View
Toto téma ukazuje, jak pracovat s pracovními oblastmi seznamového zobrazení. Pracovní oblasti jsou obdélníkové virtuální oblasti, které lze použít k uspořádání položek v ovládacím prvku zobrazení seznamu. Pracovní oblast není okno a nemůže mít viditelné ohraničení. Ve výchozím nastavení ovládací prvek zobrazení seznamu neobsahuje žádné pracovní oblasti. Vytvořením pracovní oblasti můžete vytvořit prázdné ohraničení vlevo, nahoře nebo vpravo od položek nebo způsobit zobrazení vodorovného posuvníku, pokud by ho normálně nebylo.
Co potřebujete vědět
Technologie
Požadavky
- C/C++
- Programování uživatelského rozhraní systému Windows
Instrukce
Vytvoření pracovní oblasti
Následující příklad kódu C++ ukazuje, jak vytvořit pracovní oblast s prázdným ohraničením 25 pixelů na jeho horní, levé a pravé straně.
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;
}
Vytvoření více pracovních oblastí
Následující příklad kódu C++ ukazuje, jak vytvořit dvě pracovní oblasti v ovládacím prvku. Každá pracovní oblast používá asi polovinu klientské oblasti a je obklopena prázdným ohraničením o rozměrech 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;
}
Určení pracovní oblasti, do které položka patří
Jedním ze způsobů, jak určit, do které pracovní oblasti položka patří, je následující:
- Načtěte seznam souřadnic všech pracovních oblastí v ovládacím prvku zobrazení seznamu.
- Načtěte souřadnice položky.
- Určete, zda souřadnice položky leží v souřadnicích jedné z pracovních oblastí.
Funkce definovaná aplikací v následujícím příkladu kódu jazyka C++ vrátí index pracovní oblasti, do které položka patří. Pokud funkce selže, vrátí hodnotu -1. Pokud je funkce úspěšná, ale položka není uvnitř žádné pracovní oblasti, vrátí funkce hodnotu 0, protože všechny položky, které nejsou uvnitř pracovní oblasti, se automaticky stanou členem pracovní oblasti nula.
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;
}
Související témata
-
referenční ovládacích prvků List-View