Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por padrão, um controle de lista organiza todos os itens de forma de grade padrão. No entanto, há suporte para outro método, áreas de trabalho, que organiza os itens de lista em grupos retangulares. Para obter uma imagem de um controle de lista que implementa áreas de trabalho, consulte Usando controles de List-View no SDK do Windows.
Observação
As áreas de trabalho só ficam visíveis quando o controle da lista está no modo ícone ou modo ícone pequeno. No entanto, todas as áreas de trabalho atuais serão mantidas se o modo de exibição for alternado para o modo de relatório ou lista.
As áreas de trabalho podem ser usadas para exibir uma borda vazia (à esquerda, 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 tenham significados diferentes. Em seguida, o usuário pode 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 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 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 for movido para uma área de trabalho, ele se tornará um membro da área de trabalho para a qual foi movido. Se um item não estiver dentro de nenhuma área de trabalho, ele se tornará 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, será necessário criar o item e movê-lo para a área de trabalho desejada com uma chamada para SetItemPosition. O segundo exemplo a seguir 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 em torno 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);