/*
TreeMultiEx :
- Gestion de la multiselection
- Gestion de la couleur d'écriture de chaque item
- Gestion de la couleur de fond et de celle du texte
des items selectionnés (pour tous les items)
- Gestion de la font des items (gras, italique, souligné, taille) pour chaques items
- Gestion du deplacement des items dans la liste (Up/Down) avec
mémorisation du déroullement de chaque node de l'arbre
- Suppression de chaques item avec leur sous item et les data assosier a chacun d'eux
- Gestion de la copy de branches vers un autre TreeMultiEx
- Numerotation de la position de chaque item dans sa branche
- Tri par position de chaque items quand il sont ajouter
Source / Exemple :
//-----------------------------------------------
class CTreeMultiEx : public CTreeCtrl
{
// Construction
public:
CTreeMultiEx();
//Efface la selection
void ClearSelection();
//Selection tous les items entre les 2 items en param
BOOL SelectItems(HTREEITEM hItemFrom, HTREEITEM hItemTo);
//Ajoute un item a la liste
HTREEITEM AddItem(TreeItemEx hItemEx, HTREEITEM hFatherItem = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
HTREEITEM AddItem(CString strText,HTREEITEM hFatherItem = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST
,COLORREF crCoul = RGB(0,0,0),int iPos = 0, void * pData = NULL);
//Pour la multiselection
//Même utilisation qu'avec un CListCtrl
HTREEITEM GetFirstSelectedItem();
HTREEITEM GetNextSelectedItem( HTREEITEM hItem );
HTREEITEM GetPrevSelectedItem( HTREEITEM hItem );
//Permet de choisir la couleur d'un item
void SetItemCoul(HTREEITEM hItem, COLORREF crCoul = RGB(0,0,0));
//Retourne la couleur de l'item en param
COLORREF GetItemCoul(HTREEITEM hItem) const;
//Permet de choisir la couleur du texte pour les items sélectionnés
void SetSelTextCoul( COLORREF crCoul = RGB(255,255,255) /*Blanc*/);
//Permet de choisir la couleur du fond pour les items sélectionnés
void SetSelBkCoul( COLORREF crCoul = RGB(0,100,200) /*Bleu std*/);
//Permet de choisir la couleur de fond
ULONG SetBkColor(COLORREF crCoul);
//Permet de choisir la fonte d'un item
void SetItemFont(HTREEITEM hItem,bool bItalic = false, bool bBold = false
,bool bUnderline = false, int iHeight = -1);
//Idem mais avec une struct LOGFONT
void SetItemFont(HTREEITEM hItem, LOGFONT font);
//Retourne la fonte de l'item en param
LOGFONT GetItemFont(HTREEITEM hItem) const;
//Supprime l'item em param et tous ces fils si il y en a
//Supprime les ref a l'item est ces fils dans les maps
//Supprime les item data de lui est ces fils si bKillData = true
//KillOnlyChild detruit seulement les enfants de l'item
BOOL DeleteItem(HTREEITEM hItem, bool bKillData = false, bool bKillOnlyChild = false);
//Supprime tous les items selectionnés
BOOL DeleteAllSelectedItems(bool bKillData = false);
//Idem que la fct original sauf qu'elle retourne TVI_ROOT
//si le père d'un item et la racine (au lieu de NULL)
//Elle retourne une struct TreeItemEx avec tutes les infos sur l'item
TreeItemEx GetParentItem(HTREEITEM hItem) const;
//Retourne un vecteur contenant le TreeItemEx de tous les pere de
//l'item en cour (le dernier est bien sur TVI_ROOT)
std::vector<TreeItemEx> GetAllParentItem(HTREEITEM hItem) const;
//Si bRespect = true, le deroulement des branche sera
//respecter lors de l'utilisation de up/down si non
//toute les branches seront fermés a chaque fois
void RespectNodeExpand(bool bRespect = true);
//Si bShow = true affiche la position de l'item en
//plus de son texte ([Pos] Texte)
void ShowPos(bool bShow = true);
bool bIsVisiblePos() const { return m_bShowPos;}
//Permet de faire monter (ou descendre un item ds la liste)
//Si plusieurs items sont selectionnés seul le premier sera déplacer
//Si hItem = Null alors deplace le 1er item est selectionné
//Affiche un msgbox si hItem = NULL et pas de selection
bool UpItem(HTREEITEM hItem = NULL);
bool DownItem(HTREEITEM hItem = NULL);
//Permet de savoir si un item est derouler ou pas
bool bIsExpandedItem(HTREEITEM hItem) const;
//Permet de choisir le tree associer
void SetLinkedTree(CTreeMultiEx * pTree);
//Ajout l'item est tous ces fils au tree defint par SetLinkedTree
//hLinkedTreeFatherItem sert a définir quel sera le pere des items a ajouter
//dans le tree Linker
//ATTENTION : Pour que cette fct fonctionne correctement
//il faut que les 2 tree soit linker entre eux (fct SetLinkedTree)
bool AddToLinkedTree(const HTREEITEM hItem, HTREEITEM hLinkedTreeFatherItem = TVI_ROOT,
bool bDeleteAfterCopy = false, bool bAddFatherItem = false);
//Retourne un ptr sur la map contenant pour chaques items sa position dans sa node
const CMap< HTREEITEM, HTREEITEM, int, int&> * GetAllItemsPos();
//Retourne un ptr sur la map contenant pour chaque items les data assosiées
const CList<TreeItemEx,TreeItemEx> * GetDataList();
//Retourne toute la struct TreeItemEx
TreeItemEx * GetItemExData(HTREEITEM hItem) const;
//Retourne seulement les data de l'item (Comme la version originale)
//C'est a dire le pData de la struct TreeItemEx
DWORD GetItemData(HTREEITEM hItem) const;
//Idem que la fct originale
int SetItemData(HTREEITEM hItem, DWORD dwData);
//Met le flag de trie des item a vrai
//Les items sont trier un fois si bSort = true puis
//ils seront retrié a chaque addItem tant que m_bSortByPos = true
void SetSortByPos(bool bSort = true);
//Trie les items en fct de leur position
//Ne trie que les item dont le pere et hParent
bool SortByPos(HTREEITEM hParent = TVI_ROOT);
void SetLinkOfItem(HTREEITEM hThisTreeItem, HTREEITEM hLinkedTreeItem);
Conclusion :
Voila ya une petite appli dans le zip pour expliquer
bugs connus :
-Dans le up/Dwn les pères des items sont parfois perdu
-Quelques bugs dans la fct AddToLinkedTree
(certain items refuse de s'ajouter ou de ce supprimer)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.