CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++ & MFC) fonctionement de CTreeView

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 14:31:29

Salut tout le monde :)

J´ai un petit probleme en MFC. J´ai fait une aplication permetant de lire des informations vectoriel de l´IGN ( les memes informations que vous voyez sur votre carte michelin) et de les afficher en OpenGL. J´ai spilté ma vue en 2, en metant la vue de droite heritant de CTreeView. J´arive à ajouter des items, mais je sais pas comment ajouter une action pour lorsque je selection un de ces items.

Pour voir ce que ça donne pour l´instant : http://membres.lycos.fr/davidu/BdCarto.PNG ( vous pouvez y voir une partie des Bouches du Rhones ( 13), avec l´étang de berre, l´aéroport de Marignane et Marseille :) )

Ce que je voudrai faire, c´est cliquer sur l´item " autoroutes" et que cela modifie un booléen qui me permetrai d´afficher ou non les autoroutes et changerai la petite icone.

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 14:59:09

Le rapport avec la création de jeux ?
Sa peut servir si l´on fait un editeur de niveau, en rangeant dans l´arbre les differentes ressources necessaires.
Ou dans un RPG pour servir d´inventaire.

Altonfrere
Altonfrere
Niveau 10
16 mai 2004 à 17:20:15

Pour une CTreeView tu peux surcharger les messages TVN_quelquechose. Par exemple TVN_SELCHANGED. Seul problème c´est que ce message ( TVN_SELCHANGED) ne sera envoyé que lorsque la sélection dans l´arbre change réellement, donc si tu cliques 2 fois sur le même item ca ne marchera pas.

Autre solution, le message NM_CLICK lui sera déclenché à chaque fois tu cliqueras dans le CTreeView. Là le truc c´est de vérifier sur quoi tu viens de cliquer ( car ce n´est pas forcément un item, ca peut être une zone vide).

void CMyView::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint CurrentPos;
UINT nFlags;
HTREEITEM TreeSelection;

GetCursorPos(&);
ScreenToClient(&);

TreeSelection = GetTreeCtrl().HitTest(CurrentPos, & ) ;

if ( nFlags & TVHT_ONITEM )
{
/ / action si tu cliques sur un des item
}

  • pResult = 0;

}

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 17:23:59

J´ai surchargé le message NM_DBLCLK pour obtenir la fonction OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)

voila ce que je met dedans pour l´instant :

void CBdCartoVw::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_TREEVIEW* pNMTreeView = ( NM_TREEVIEW*)pNMHDR;
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
if(!hItem) return;
CTreeCtrl& Tree = GetTreeCtrl();
Tree.SelectItem(hItem);

Tree.SetItemImage(hItem,2,2);
Tree.SetItemText(hItem,"nouveau nom");

*pResult = 0;
}

Et sa ne fait rien :(

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 17:25:57

T´a repondu avant que j´ai eu temps d´ecrire mon message :)
Je vais voir ça.

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 17:31:53

C´est bon, ça marche :)

Si jamais le probleme arive a quelqun, je met mon code :

void CBdCartoVw::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
CPoint CurrentPos;
UINT nFlags;
HTREEITEM TreeSelection;

GetCursorPos(&);
ScreenToClient(&);
CTreeCtrl& Tree = GetTreeCtrl();

TreeSelection = Tree.HitTest(CurrentPos, & ) ;

if ( nFlags & TVHT_ONITEM ) {
Tree.SetItemImage(TreeSelection,2,2); / / changement de l´image
Tree.SetItemText(TreeSelection,"oyo"); / / changement du texte
}

*pResult = 0;
}

Ruffi
Ruffi
Niveau 9
16 mai 2004 à 17:33:33

J´allait oublier le plus important :
Merci Altonfrere :-)))

Altonfrere
Altonfrere
Niveau 10
16 mai 2004 à 17:34:53

hehe de rien :)

j´ai regardé pour la 1ere fonction que tu as postée, j´ai vu que le itemNew.hItem contient un indice ( je pense) et non un vrai handle HTREEITEM, c´est surement un bug MFC ca :) ca serait pas le premier

Ruffi
Ruffi
Niveau 9
18 mai 2004 à 09:10:39

Juste une petite question MFC :
Comment on fait une bonne gestion d´ereure en MFC?
En console aplication, sa donne sa :

int main(int argc, char **argv){
try{
. ..
}
catch(char* message) {
cerr < < " Probleme : " < < message < < endl ;
return 1;
}
return 0;
}

Mais en MFC, on a pas acces au main. je suis obligé de mettre mes try...catch là où sa risque de pas marcher.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment