Sdílet prostřednictvím


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

referenční ovládacích prvků List-View

o ovládacích prvcích List-View

použití ovládacích prvků List-View