Partilhar via


Implementação de trabalho áreas na lista de controles

Por padrão, um controle de lista organiza todos os itens em um modo de grade padrão.No entanto, outro método é suportado, trabalhando áreas, que organiza os itens da lista em grupos retangulares.Para uma imagem de um controle de lista que implementa as áreas de trabalho, consulte usando controles de exibição de lista nos Windows SDK.

ObservaçãoObservação

Áreas de trabalho são visíveis somente quando o controle de lista está no modo de ícone pequeno ou ícone.No entanto, as áreas de trabalho atual são mantidas se o modo é alternado para o modo de lista ou relatório.

Áreas de trabalho podem ser usadas para exibir uma borda vazia (e/a esquerda, superior ou à direita dos itens) ou causar uma barra de rolagem horizontal ser exibido quando normalmente não seria haver um.Outro uso comum é criar várias áreas de trabalho para que os itens podem ser movidos ou eliminados.Com esse método, você pode criar áreas em uma única exibição possuem significados diferentes.O usuário então pode categorizar os itens colocando-os em uma área diferente.Um exemplo disso seria um modo de exibição de um sistema de arquivo que tem uma área para arquivos de leitura/gravação e outra área para arquivos somente leitura.Se um item de arquivo foram movido para a área de somente leitura, ele automaticamente seria somente leitura.Movendo um arquivo de área de somente leitura para a área de leitura/gravação seria tornar o arquivo leitura/gravação.

CListCtrlfornece várias funções de membro para criar e gerenciar áreas de trabalho no seu controle de lista.GetWorkAreas e SetWorkAreas recuperar e definir uma matriz de CRect objetos (ou RECT estruturas), que armazenam as áreas de trabalho implementado atualmente para o controle de lista.Além disso, GetNumberOfWorkAreas recupera o número atual de áreas de trabalho para o controle de lista (por padrão, zero).

Itens e áreas de trabalho

Quando é criada uma área de trabalho, itens que se encontram dentro da área de trabalho se tornam membros dele.Da mesma forma, se um item é movido para uma área de trabalho, ele se torna um membro da área de trabalho para o qual foi movido.Se um item não estar dentro de qualquer área de trabalho, ele automaticamente se torna um membro da primeira área de trabalho (índice 0).Se você deseja criar um item e ter ele colocado dentro de uma área de trabalho específica, você precisará criar o item e mova-o para a área de trabalho desejada com uma chamada para SetItemPosition.O segundo exemplo abaixo demonstra essa técnica.

O exemplo a seguir implementa quatro áreas de trabalho (rcWorkAreas), de tamanho igual com uma borda de 10 pixels de largura ao redor de cada área de trabalho, em um controle de lista (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);    

A chamada para ApproximateViewRect foi feita para obter uma estimativa da área total necessária para exibir todos os itens em uma região.Essa estimativa será dividida em quatro regiões e preenchida com uma borda de 5 pixels de largura.

O exemplo a seguir atribui os itens existentes na lista para cada grupo (rcWorkAreas) e atualiza a exibição do controle (m_WorkAreaListCtrl) para completar o efeito.

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

Consulte também

Referência

Usando CListCtrl

Conceitos

Controles (MFC)