Partager via


Implémentation des zones de travail dans les contrôles de liste

Par défaut, un contrôle de liste organise tous les éléments d’une mode grille standard. Toutefois, une autre méthode est prise en charge, les zones de travail, qui organisent les éléments de liste en groupes rectangulaires. Pour obtenir une image d’un contrôle de liste qui implémente des zones de travail, consultez Utilisation de contrôles List-View dans le Kit de développement logiciel (SDK) Windows.

Remarque

Les zones de travail sont visibles uniquement lorsque le contrôle de liste est en mode icône ou petite icône. Toutefois, les zones de travail actuelles sont conservées si l’affichage est basculé vers le mode rapport ou liste.

Les zones de travail peuvent être utilisées pour afficher une bordure vide (sur la gauche, le haut et/ou la droite des éléments), ou provoquer l’affichage d’une barre de défilement horizontale lorsqu’il n’y en aurait normalement pas un. Une autre utilisation courante consiste à créer plusieurs zones de travail vers lesquelles les éléments peuvent être déplacés ou supprimés. Avec cette méthode, vous pouvez créer des zones dans une vue unique qui ont des significations différentes. L’utilisateur peut ensuite classer les éléments en les plaçant dans une autre zone. Par exemple, il s’agit d’une vue d’un système de fichiers qui a une zone pour les fichiers en lecture/écriture et une autre zone pour les fichiers en lecture seule. Si un élément de fichier a été déplacé dans la zone en lecture seule, il devient automatiquement en lecture seule. Le déplacement d'un fichier de la zone en lecture seule vers la zone en lecture/écriture permettrait de rendre le fichier modifiable.

CListCtrl fournit plusieurs fonctions membres pour créer et gérer les zones de travail dans votre contrôle de liste. GetWorkAreas et SetWorkAreas récupèrent et définissent un tableau d’objets (ou CRect structures), qui stockent les zones de travail actuellement implémentées pour votre contrôle de RECT liste. En outre, GetNumberOfWorkAreas récupère le nombre actuel de zones de travail pour votre contrôle de liste (par défaut, zéro).

Éléments et zones de travail

Lorsqu’une zone de travail est créée, les éléments qui se trouvent dans la zone de travail deviennent membres. De même, si un élément est déplacé dans une zone de travail, il devient membre de la zone de travail vers laquelle il a été déplacé. Si un élément ne se trouve pas dans une zone de travail, il devient automatiquement membre de la première zone de travail (index 0). Si vous souhaitez créer un élément et le placer dans une zone de travail spécifique, vous devez créer l’élément, puis le déplacer dans la zone de travail souhaitée avec un appel à SetItemPosition. Le deuxième exemple ci-dessous illustre cette technique.

L’exemple suivant implémente quatre zones de travail (rcWorkAreas), de taille égale avec une bordure de 10 pixels autour de chaque zone de travail, dans un contrôle de liste (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);

L’appel à ApproximateViewRect a été effectué pour obtenir une estimation de la zone totale requise pour afficher tous les éléments d’une région. Cette estimation est ensuite divisée en quatre régions et complétée par une bordure de 5 pixels.

L’exemple suivant affecte les éléments de liste existants à chaque groupe (rcWorkAreas) et actualise l’affichage de contrôle (m_WorkAreaListCtrl) pour terminer l’effet.

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

Voir aussi

Utilisation de CListCtrl
Contrôles