Wykonania pracy obszarów formantów listy
Domyślnie formant listy Rozmieszcza wszystkie elementy w sposób standardowy siatki.Inną metodą jest jednak obsługiwane, praca obszarów, które Rozmieszcza elementy listy grup prostokątny.W przypadku obrazu formantu listy, która implementuje obszary robocze, zobacz przy użyciu widoku listy formantów w Windows SDK.
[!UWAGA]
Obszary robocze są widoczne tylko wtedy, gdy formant listy jest w trybie mała ikona lub ikona.Jednak bieżące obszarów roboczych są zachowywane, jeśli widok jest przełączony do trybu raport lub listę.
Obszary robocze można wyświetlić puste obramowania (na lewo, u góry lub po prawej stronie pozycji) lub spowodować poziomego paska przewijania wyświetlany, gdy nie istnieje normalnie byłby jeden.Innym typowym jest utworzenie wielu obszarów roboczych do których elementów można przeniesiony lub porzucone.Z tej metody można utworzyć obszary w jednym widoku, który mają różne znaczenie.Użytkownik może następnie klasyfikowanie elementy poprzez umieszczenie ich w inny obszar.Przykładem tego byłoby widoku systemu plików, które ma obszar do odczytu i zapisu plików i innego obszaru dla plików tylko do odczytu.Jeśli element plik zostały przeniesione do obszaru tylko do odczytu, automatycznie stałby się tylko do odczytu.Przenoszenie plików z obszaru tylko do odczytu do obszaru odczytu i zapisu spowodowałoby odczytu i zapisu pliku.
CListCtrludostępnia kilka funkcji elementów członkowskich do tworzenia i zarządzania obszarów roboczych w formantu listy.GetWorkAreas i SetWorkAreas pobrania i ustawienia tablicę CRect obiektów (lub RECT struktury), które przechowywane aktualnie wdrożony obszary robocze dla formantu listy.Ponadto GetNumberOfWorkAreas pobiera bieżącą liczbę obszarów roboczych dla formantu listy (domyślnie zero).
Elementy i obszary pracy
Podczas tworzenia obszaru roboczego elementy, które znajdują się w obszarze roboczym stają się członkami.Podobnie jeśli element zostanie przeniesiony do obszaru roboczego, zostaje członkiem obszaru roboczego, do którego został przeniesiony.Jeśli element nie leży w każdy obszar roboczy, staje się automatycznie członkiem pierwszego obszaru roboczego (indeks 0).Jeśli chcesz utworzyć element i mieć ona umieszczona w obrębie określonego obszaru roboczego, trzeba będzie utworzyć element, a następnie przenieś go do żądanego obszaru roboczego z zaproszeniem do SetItemPosition.W poniższym przykładzie drugim zademonstrowano tę technikę.
Poniższy przykład implementuje cztery obszary robocze (rcWorkAreas), równej wielkości o 10 pikseli całej obramowanie wokół każdego obszaru roboczego w formantu listy (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);
Wywołanie ApproximateViewRect dokonano uzyskać oszacowanie całkowitego obszaru wymagane, aby wyświetlić wszystkie elementy w jednym regionie.Preliminarz ten jest następnie podzielony na cztery obszary i dopełnione obramowania 5 pikseli całej.
Następny przykład przypisuje każdej grupy istniejących elementów listy (rcWorkAreas) i odświeża widok kontroli (m_WorkAreaListCtrl) do ukończenia efekt.
// 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);