Поделиться через


Реализация рабочих областей в элементах управления "Список"

По умолчанию элемент управления упорядочивает Список всех элементов в стандартной таким сетки. Однако поддерживается другой метод, рабочие области, который упорядочивает элементы списка в прямоугольные группы. Для изображения элемента управления "Список", реализующий рабочие области см. в разделе использование элемента управления "список" в Windows SDK.

Примечание

Рабочие области отображаются, только если элемент управления "Список" на Значке или малых режиме Значка.Однако все текущие рабочие области поддерживаются, если представление переключено режим отчета или списка.

Рабочие области можно использовать для отображения пустой границы (на слева, сверху справа или элементов), или сбой горизонтальную полосу прокрутки для отображения, когда обычно не было бы одного. Это общее потребление создать несколько рабочих областей, в которых элементы можно перемещать или удалять. С помощью этого метода, можно создать области в одном представлении, имеют различные значения. Пользователь может затем классифицировать элементы, размещая их в другую область. Пример этого будет представлением файловой системы, имеющее область для чтения/записи, что файлы и другая область только для чтения файлов. Если элемент перемещен в файла только для чтения области, он автоматически стал бы только для чтения. Перемещение чтение из файла только для чтения/записи области в области файла для чтения/записи.

CListCtrl предоставляет функции-члены для создания и управления рабочие области в элементе управления списка. GetWorkAreasSetWorkAreas извлекает и и задает массив объектов CRect (или структур RECT ), которые хранятся в данный момент, рабочие области для элемента управления "Список". Кроме того, GetNumberOfWorkAreas извлекает количество рабочих областей для элемента управления "Список" (по умолчанию), ноль.

Элементы и рабочие области

Если рабочая область создана, элементы, которые лежат в пределах рабочей области имеют членами ее. Аналогично, если элемент перемещен в рабочую область, выполняется членом рабочей области, которой она была перемещена. Если элемент не находится в пределах любой рабочей области, автоматически переходит членом первой (индекс 0) рабочей области. Если требуется создать элемент и просматривать его размещать в пределах конкретной рабочей области, необходимо создать элемент, а затем переместить его в нужную рабочую область с вызовом метода SetItemPosition. Второй пример показывает этот метод.

В следующем примере реализуется 4 рабочей области (rcWorkAreas), равного размеру с шириной в 10 пикселей границы вокруг каждой рабочей области, в элементе управления списка (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);    

В ApproximateViewRect вызван для получения полной оценку всей площади, необходимые для отображения всех элементов в одной области. Эта оценка затем разделяется на 4 области и проложена с шириной в 5 пикселей границы.

Следующий пример присваивает существующие элементы списка в каждой группе (rcWorkAreas) и обновляет элемент управления (m_WorkAreaListCtrl) для выполнения в силу.

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

См. также

Ссылки

Использование CListCtrl

Основные понятия

Элементы управления (MFC)