begin process at 2012 05 27 15:19:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CTREECTRL AMÉLIORÉ

CTREECTRL AMÉLIORÉ


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :ctreectrl, multiselection, couleur, fonte Niveau :Débutant Date de création :27/08/2007 Date de mise à jour :13/09/2007 17:51:02 Vu / téléchargé :5 047 / 240

Auteur : kts_system

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 août 2007 11:45:31 :
- Correction de plusieurs bugs - Ajout des fct Add items - Amelioration de la gestion de la copy de node entre tree - Ajout d'une fonction de tri par position L'ensemble et plus stable mais il reste encore quelques bug notament sur la copy de node entre tree et peut etre aussi sur la gestion des items data (je corrigeré au fur et a mesure)
12 septembre 2007 17:34:30 :
-Correction du GetAllItemPos (Qui ne renvoyer par les bonne pos) -Correction du GetDataList (Qui ne renvoyer pas une liste complete) -Correction de la ftc de tri par position (Elle ne trié que les items dont le pere etait TVI_ROOT) -Modif de SetSortByPos (prend un item en param maintenant)
13 septembre 2007 17:51:02 :
-Correction du GetAllItemPos (Qui ne renvoyer par les bonnes pos) -Correction du GetDataList (Qui ne renvoyer pas une liste complete) -Correction de la ftc de tri par position (Elle ne trié que les items dont le père etait TVI_ROOT) -Modif de SetSortByPos (prend un item en param maintenant)

 Sources du même auteur

Source avec Zip Source avec une capture ALGO DE PATHFINDING AVEC PETIT JEU
Source avec Zip Source avec une capture BUVETTE POURSUITE VIRTUELLE
Source avec Zip Source avec une capture LECTEUR MP3 EN DOC/VUE
Source avec Zip EXPLORATEUR DE FICHIER
Source avec Zip TREEREG (GESTION DU REGISTRE COMME UN ARBRE)

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec une capture FOND D'ÉCRAN CHANGEANT DE COULEUR EN FONCTION DE L'HEURE (WI... par tynry
MASTER MIND CONSOLE par bast63
Source avec Zip Source avec une capture LIBGRAPHC - DESSIN D'UI EN MODE CONSOLE par Nenyan
Source avec Zip Source avec une capture ONGLETS MULTICOLORES (WIN32 API) par racpp
Source avec Zip Source avec une capture VISUALISEUR RVB AVEC QT par Sunglasses

Commentaires et avis

Commentaire de kts_system le 28/08/2007 17:58:51

j'ai trouver quelques bugs (sur la gestion des linked tree et sur la gestion des positions) je mettrai a jour dans la semaine

Commentaire de kts_system le 13/09/2007 17:57:06

Par contre il y a un bug ds le up/down, certaines fois les péres des items déplacés sont perdu
et sa fait n'importe quoi

Ex : si j'ai

A
--1
--2
--3

B
--1
--2
--3

Et que j'utilise la fct up ou down, certaine fois sa foire
(l'inversion et ok mais les fils des items ne sont pas reconstruit correctement)
et ca sort par ex :

B
--1
   --2
     --3

A
--1
--2
--3

J'espère que j'ai bien expliqué !
Je pense que le prob est ds la fct RedrawChild mais j'arrive pas a trouver ou
Voila si qq'un trouve je suis preneur.

Commentaire de basted le 14/09/2007 13:19:52

Cool ta source, il faut juste commenter tout ce qui concert OnClignote pour que ca marche !
Pourais tu ajouter un parameter de couleur de fond de la ligne complete par item non selectionné ? (je dis pas ca parque j'en est besoin - ca peut permetre de differentier un peut comme un sous arbre mais sans indentation)

J'ai pas tester avec des icon mais je pense que ca dois marcher.
Bonne source en tout cas, qui tombe a pic par rapport a un de mes projet en cours.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[MFC] Utilisation de la classe CTreeCtrl, couleur des lignes [ par karine3884 ] Bonjour, Je programme sous Visual Studio C++ 6.0. J'utilise un CtreeCtrl pour créer un arbre (une arborescence). J'aimerai modifier la couleur des li Texte personnalisé [ par Ilmen_ ] Voila, j'ai un problème avec le code ci dessous, qui permet d'afficher un texte personnalisé (taille, couleur, etc.). On me signale une erreur sur la Chercher un pixel de couleur précise. [ par krokro6 ] Salut à tous, j'aurai besoin d'aide pour chercher dans l'écran un pixel d'une couleur spécifiée et ensuite pointer la souris dessus mais je ne sais vr Personnaliser le texte d'un contrôle "EDIT" [ par Ilmen_ ] Voila, dans un topic précédent, j'avais voulu savoir comment savoir comment attribuer une fonte personnalisée à un contrôle de type "EDIT" ; n'ayant p Onglets personalisés avec TabControl [ par Scuz ] Bonjour, Je suis débutant, et j'ai un peu de mal avec les onglets : j'ai récupéré le projet de farscape sur les TabControl, qui est très pratique, mai Simulation LED tricolore (RGB) [ par Nei_Mad ] Bonjour.Je suis actuellement en train de développer un logiciel et j'ai besoin qu'il puisse simuler l'allumage d'une LED tricolor (en fait 3 LEDs : un Personailer les boites de dialogue [ par zanrek ] Bonjour, je souhaiterais créer une boite de dialogue, mais lors de l'initialisation de celle-ci, je voudrais être capable de modifier la couleur et la couleurs et animation [ par jeanphilippe37 ] Slt, je voudrais savoir comment on fait pour mettre de la couleur ds un programme en Ms DOS ainsi que de faire des animations. Par exemple faire Recuperer la couleur d'un pixel dans une image raw [ par seb2086 ] Bonjour,J'ai une image raw dans laquelle est dessiné un cube rouge, un cube vert et un cube bleu.L'image est enregistrée avec 3 couches et sans entrel gerer le changement des checks d'une CTreeCtrl [ par sewahass ] salutcomment je peux faire pour attacher un handler au CTreeCtrl, de telle façon que si je change l'etat d'une check (d'un  Item donné)  j'execute alo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales