Implementowanie obszarów roboczych w formantach listy
Domyślnie formant listy Rozmieszcza wszystkie elementy w sposób standardowy siatki.Jednak inna metoda jest obsługiwana, praca obszary, które Rozmieszcza elementy listy na prostokątne grupy.W przypadku obrazu formantu listy, który implementuje obszarów roboczych, zobacz przy użyciu widoku listy formantów w Windows SDK.
[!UWAGA]
Obszary robocze są widoczne tylko wtedy, gdy formant listy w trybie mała ikona lub ikona.Jednak wszelkie bieżące obszary robocze są zachowywane, jeśli widok jest przełączony do trybu raport lub listę.
Obszary robocze można wyświetlić puste obramowania (na lewej, górnej i prawej stronie elementów) lub spowodować poziomego paska przewijania wyświetlany, gdy nie normalnie będzie.Innym typowym zastosowaniu polega na utworzeniu wielu obszarów roboczych, do których elementy mogą być przeniesione lub usunięte.Dzięki tej metodzie można utworzyć obszary w jednym widoku, który ma różne znaczenie.Użytkownik może następnie klasyfikuje towary poprzez umieszczenie ich w inny obszar.Przykładem tego może być widok systemu plików, który 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 stanie się tylko do odczytu.Przenoszenie plików z obszaru tylko do odczytu do obszaru odczytu/zapisu pozwoliłoby pliku odczytu i zapisu.
CListCtrlzawiera kilka funkcji elementów członkowskich do tworzenia i zarządzania obszary robocze w formancie z listy.GetWorkAreas i SetWorkAreas pobrania i ustawienia tablicy CRect obiektów (lub RECT struktury), który zapas obecnie implementowane obszary robocze listy kontrolnej.Dodatkowo GetNumberOfWorkAreas pobiera bieżącą liczbę obszarów roboczych listy kontrolnej (domyślnie od zera).
Przedmioty i obszary pracy
Gdy tworzony jest obszar roboczy, elementów, które znajdują się w obszarze roboczym stają się członkowie jego rodziny.Podobnie jeśli element zostanie przeniesiony do obszaru roboczego, staje się członkiem obszaru roboczego, do którego został przeniesiony.Jeśli element nie leży w obrębie każdy obszar roboczy, staje się automatycznie członkiem pierwszego obszaru roboczego (indeks 0).Jeśli chcesz utworzyć nowy element i on umieszczony w obrębie określonego obszaru roboczego, trzeba będzie utworzyć element i przenieść go do żądanego obszaru roboczego z wezwaniem do SetItemPosition.W drugim przykładzie poniżej zademonstrowano tę technikę.
W poniższym przykładzie implementuje czterech obszarów roboczych (rcWorkAreas), o rozmiarze równym z 10-pikseli szerokości obramowania wokół każdego obszaru roboczego w formancie 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 Aby uzyskać szacowaną wartość całkowitej powierzchni wymagane do wyświetlania wszystkich elementów w jednym regionie.Prognoza ta jest następnie podzielony na cztery obszary i wypełniane z 5-pikseli szerokości obramowania.
Następny przykład przypisuje do każdej grupy istniejących elementów listy (rcWorkAreas) i odświeża widok kontroli (m_WorkAreaListCtrl), aby zakończyć działanie.
// 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);