Partager via


Implémenter des emplacements de travail dans les contrôles de liste

Par défaut, un contrôle de liste réorganise tous les éléments sous forme de grille standard. Toutefois, une autre méthode est prise en charge, les emplacements de travail, qui organise les éléments de liste en groupes rectangulaires. Pour une image d'un contrôle de liste qui implémente les emplacements de travail, consultez sur l'utilisation des contrôles list VIEW dans Kit de développement logiciel Windows.

Notes

Les emplacements de travail sont visibles uniquement lorsque le contrôle de liste est en mode icônes ou de petites icônes.Toutefois, les emplacements de travail actifs sont maintenus si la vue est basculée en mode de rapport ou de liste.

Les emplacements de travail peuvent être utilisés pour afficher une bordure vide (à gauche, au dessus et/ou à droite des éléments), ou provoquer l'affichage d'une barre de défilement horizontale lorsqu'il n'y aurait normalement pas. Une autre utilisation courante consiste à créer plusieurs emplacements de travail vers lesquels les éléments peuvent être déplacés ou supprimés. Avec cette méthode, vous pouvez créer des domaines dans une vue avec différentes significations. L'utilisateur peut ensuite demander les éléments par catégorie en les plaçant dans une zone différente. Un exemple de cette approche est une vue d'un système de fichiers qui possède une zone pour les fichiers en lecture-écriture et une zone différente pour les fichiers en lecture seule. Si un élément de fichier était entré dans la zone en lecture seule, il deviendrait automatiquement en lecture seule. Déplacer un fichier de la zone en lecture seule dans la zone en lecture/écriture entraînera la lecture/écriture du fichier.

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

Éléments et emplacements de travail

Lorsqu'un emplacement de travail est créé, les éléments qui se trouvent dans l'emplacement de travail en deviennent membres. De même, si un élément est déplacé dans un emplacement de travail, il devient membre de l'emplacement de travail dans lequel il a été déplacé. Si un élément ne se trouve dans la plage d'aucun emplacement de travail, il devient automatiquement un membre de l'emplacement de travail du premier index (0) . Si vous souhaitez créer un élément et le faire placer dans un emplacement de travail spécifique, vous devez créer l'élément et l'entrer dans l'emplacement de travail voulu par un appel à SetItemPosition. Le deuxième exemple suivant montre cette technique.

L'exemple suivant implémente les emplacements de travail (rcWorkAreas), de taille égale avec une bordure de 10 pixels autour de chaque emplacement 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ée pour obtenir une estimation de la surface totale requise pour consulter tous les éléments dans une zone. Cette évaluation est alors divisée en quatre régions et terminée avec une bordure niveau 5 d'un minimum.

L'exemple suivant affecte les éléments de liste existants à chaque groupe (rcWorkAreas) et actualise l'affichage de contrôle (m_ WorkAreaListCtrl) pour terminer le résultat.

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

Référence

À l'aide de CListCtrl

Concepts

contrôles (MFC)