Freigeben über


Verwenden von List-View Arbeitsbereichen

In diesem Thema wird veranschaulicht, wie Sie mit Arbeitsbereichen für Listenansichten arbeiten. Arbeitsbereiche sind rechteckige virtuelle Bereiche, die zum Anordnen von Elementen in einem Listenansichtssteuerelement verwendet werden können. Ein Arbeitsbereich ist kein Fenster und kann keinen sichtbaren Rahmen aufweisen. Standardmäßig verfügt das Listenansicht-Steuerelement über keine Arbeitsbereiche. Indem Sie einen Arbeitsbereich erstellen, können Sie links, oben oder rechts von den Elementen einen leeren Rahmen erstellen oder eine horizontale Bildlaufleiste anzeigen lassen, wenn normalerweise keine vorhanden wäre.

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Programmierung der Windows-Benutzeroberfläche

Anweisungen

Erstellen eines Arbeitsbereichs

Im folgenden C++-Codebeispiel wird veranschaulicht, wie Sie einen Arbeitsbereich mit einem leeren Rahmen von 25 Pixeln oben, links und rechts erstellen.

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

Erstellen mehrerer Arbeitsbereiche

Im folgenden C++-Codebeispiel wird veranschaulicht, wie zwei Arbeitsbereiche in einem Steuerelement erstellt werden. Jeder Arbeitsbereich verwendet etwa die Hälfte des Clientbereichs und ist von einem 25 Pixel großen leeren Rahmen umgeben.

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

Bestimmen des Arbeitsbereichs, zu dem ein Element gehört

Eine Möglichkeit zum Bestimmen des Arbeitsbereichs, zu dem ein Element gehört, besteht darin, folgendes zu tun:

  • Ruft die Liste der Koordinaten aller Arbeitsbereiche im Listenansicht-Steuerelement ab.
  • Ruft die Koordinaten des Elements ab.
  • Bestimmen Sie, ob die Elementkoordinaten innerhalb der Koordinaten eines der Arbeitsbereiche liegen.

Die anwendungsdefinierte Funktion im folgenden C++-Codebeispiel gibt den Index des Arbeitsbereichs zurück, zu dem das Element gehört. Wenn die Funktion fehlschlägt, wird –1 zurückgegeben. Wenn die Funktion erfolgreich ist, sich das Element jedoch nicht in einem der Arbeitsbereiche befindet, gibt die Funktion 0 zurück, da alle Elemente, die sich nicht innerhalb eines Arbeitsbereichs befinden, automatisch zu einem Mitglied des Arbeitsbereichs 0 werden.

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

List-View-Steuerelementreferenz

Informationen zu List-View-Steuerelementen

Verwenden von List-View-Steuerelementen