Freigeben über


Implementieren von Arbeitsbereichen in Listensteuerelementen

Standardmäßig ordnet ein Listensteuerelement alle Elemente in einer Standardrasterweise an. Allerdings wird eine andere Methode, Arbeitsbereiche unterstützt, die die Listenelemente rechteckige in Gruppen angeordnet werden. Ein Bild eines Listensteuerelements, die Arbeitsbereiche implementiert, finden Sie mit Listenansicht-Steuerelementen in Windows SDK.

Hinweis

Arbeitsbereiche sind nur sichtbar, wenn das Listensteuerelement im Symbol oder im kleinen Symbolmodus ist.werden jedoch alle aktuellen Arbeitsbereiche beibehalten, wenn die Ansicht den Berichts- oder Listenmodus gewechselt wird.

Arbeitsbereiche können verwendet werden, um einen leeren Bereich anzuzeigen (links, oben und/oder rechts von Elementen), oder führen Sie eine horizontale Bildlaufleiste angezeigt, als sie normalerweise keine geben würde. Eine weitere allgemeine Verwendung besteht, mehrere Arbeitsbereiche erstellen möchten, auf die Elemente verschoben werden oder verworfen werden können. Mit dieser Methode können Sie Bereiche einer einzelnen Ansicht erstellen, die verschiedene Bedeutungen haben. Der Benutzer kann dann die Elemente gliedern, indem er sie in einem anderen Bereich eingefügt hat. Ein Beispiel hierfür ist eine Ansicht eines Dateisystems sein, das einen Bereich für Datei mit Lese-/Schreibzugriff und einen anderen Bereich für schreibgeschützte Dateien verfügt. Wenn ein file-Element in schreibgeschützten Bereich verschoben wurden, wird es automatisch als schreibgeschützt festgelegt. Das Verschieben einer Datei im schreibgeschützten Bereich in den Lese-Schreibbereich würde den Dateilese-/schreibzugriff machen.

CListCtrl stellt mehrere Memberfunktionen zum Erstellen und Verwalten von Arbeitsbereichen im Listensteuerelement bereit. GetWorkAreas und SetWorkAreas ruft ab und legen ein Array CRect-Objekte (oder RECT-Strukturen) fest, die die derzeit implementierten Arbeitsbereiche für Ihr Listensteuerelement speichern. Außerdem ruft GetNumberOfWorkAreas die aktuelle Anzahl von Arbeitsbereichen für Ihr Listensteuerelement ab (standardmäßig, gleich).

Elemente und Arbeitsbereichen

Wenn ein Arbeitsbereich erstellt wird, werden Elemente, die innerhalb des Arbeitsbereichs liegen, Member davon. Auch wenn ein Element in einen Arbeitsbereich verschoben wird, wird es einen Member des Arbeitsbereichs, auf der es verschoben wurde. Wenn ein Element nicht innerhalb eines Arbeitsbereichs liegt, wird es automatisch einen Member des ersten (Index 0) Arbeitsbereichs. Wenn Sie ein Element erstellen und sie in einem bestimmten Arbeitsbereichs platzieren möchten, müssen Sie das Element erstellen und in den gewünschten Arbeitsbereich mit einem Aufruf an SetItemPosition bewegen. Das zweite folgende Beispiel veranschaulicht diese Technik.

Das nächste Beispiel implementiert vier Arbeitsbereiche (rcWorkAreas), der gleichen Größe mit einem Pixel-weiten Rahmen 10 um die einzelnen Arbeitsbereiche, in einem Listensteuerelement (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);    

Der Aufruf von ApproximateViewRect wurde erstellt, um eine Schätzung der Gesamtfläche abzurufen, die erforderlich war, um alle Elemente in einem Bereich anzeigen. Diese Schätzung ist dann in vier Bereiche unterteilt und aufgefüllt mit einem Rahmen Pixel-weiten 5.

Im folgenden Beispiel wird jeder Gruppe (rcWorkAreas) und den Aktualisierungen die vorhandenen Listenelemente die Steuerelementansicht (m_WorkAreaListCtrl) zu den Auswirkungen abzuschließen.

// 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);

Siehe auch

Referenz

Verwenden von CListCtrl

Konzepte

Steuerelemente (MFC)