Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Por padrão, um controle de lista organiza todos os itens em uma grade padrão. No entanto, outro método é suportado, áreas de trabalho, que organiza os itens da lista em grupos retangulares. Para obter uma imagem de um controle de lista que implementa áreas de trabalho, consulte Usando controles List-View no SDK do Windows.
Observação
As áreas de trabalho são visíveis apenas quando o controle de lista está no modo de ícone ou ícone pequeno. No entanto, todas as áreas de trabalho atuais são mantidas se a exibição for alterada para o modo de relatório ou lista.
As áreas de trabalho podem ser usadas para exibir uma borda vazia (à esquerda, na parte superior e/ou à direita dos itens) ou fazer com que uma barra de rolagem horizontal seja exibida quando normalmente não haveria uma. Outro uso comum é criar várias áreas de trabalho para as quais os itens podem ser movidos ou descartados. Com esse método, você pode criar áreas em uma única exibição que têm significados diferentes. O usuário pode então categorizar os itens colocando-os em uma área diferente. Um exemplo disso seria uma exibição de um sistema de arquivos que tem uma área para arquivos de leitura/gravação e outra área para arquivos somente leitura. Se um item de arquivo fosse movido para a área somente leitura, ele se tornaria automaticamente somente leitura. Mover um arquivo da área somente leitura para a área de leitura/gravação faria com que o arquivo fosse lido/gravado.
CListCtrl Fornece várias funções de membro para criar e gerenciar áreas de trabalho em seu controle de lista.
GetWorkAreas e SetWorkAreas recuperam e definem uma matriz de CRect objetos (ou RECT estruturas), que armazenam as áreas de trabalho atualmente implementadas para o seu controlo da lista. Além disso, GetNumberOfWorkAreas recupera o número atual de áreas de trabalho para seu controle de lista (por padrão, zero).
Itens e Áreas de Trabalho
Quando uma área de trabalho é criada, os itens que estão dentro da área de trabalho tornam-se membros dela. Da mesma forma, se um item é movido para uma área de trabalho, ele se torna um membro da área de trabalho para a qual foi movido. Se um item não estiver dentro de qualquer área de trabalho, ele se torna automaticamente um membro da primeira área de trabalho (índice 0). Se você quiser criar um item e colocá-lo dentro de uma área de trabalho específica, você precisará criar o item e, em seguida, movê-lo 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 é então dividida em quatro regiões e acolchoada com uma borda de 5 pixels de largura.
O próximo exemplo atribui os itens de lista existentes a cada grupo (rcWorkAreas) e atualiza a exibição de controle (m_WorkAreaListCtrl) para concluir 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);