Treeview et système de sous fenetre

milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008 - 27 mai 2006 à 21:42
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008 - 28 mai 2006 à 00:58
Je sais que la question a déjà été abordé a plusieurs reprises sous une forme ou une autre. En fait je crée une fenetre sans MFC (jusque là rien de très dur) et je souhaite dans cette fenêtre insérer une treeview dans une partie de cette fenetre tout en gardant un espace pour pouvoir ouvrir une sous fenêtre par la suite en fonction du node sélectionné (un bon exemple pour illustrer ce que je veux faire c'est le systeme de selection de fichier dans un projet de visual).
J'ai trouvé un tutorial pas mal a ce sujet ( http://chgi.developpez.com/windows/treeview/ ) malheureusement impossible de le faire fonctionner sous visual et comme dans la suite de mon projet je souhaite utiliser SxDL (moteur de jeu 2D qui a la facheuse manie de ne pas tourner sous dev) je me trouve obligé de garder ce "très cher" environnement.
J'ai bien essayé d'utiliser les divers codes trouvé, notemment sur la msdn, mais je dois avouer avoir loupé une ou deux étape dans la compréhension.
Si quelqu'un a des infos sur le sujet (de préférence un tutorial j'aime bien comprendre ce que je fais) ou un exemple vraiment parlant que je pourrais utiliser comme base je lui en serais reconnaissant.

Merci d'avance.

20 réponses

cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
27 mai 2006 à 22:06
A tu ajouté  #include <commctrl.h>
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 22:11
Oui, je m'en serais voulu si ca avait été aussi bête^^
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
27 mai 2006 à 22:22
Tu peux préciser l'erreur ?
As-tu appelé InitCommonControl()  ?
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 22:36
En fait je pense qu'il s'agit en fait surtout d'un problème de comprehension de ma part c'est pour ca que je ne suis pas entré dans les détails.
Mais dans le cas du tutorial que j'ai mentionné l'erreur qui s'affiche est la suivante:

C:\Program Files\Microsoft Visual Studio\MyProjects\APIX\WinMain.cpp(98) : error C2440: '=' : cannot convert from 'void *' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'

pour la ligne: wpOrigEditProc = (PVOID)SetWindowLong(hEdit,
                                                   GWL_WNDPROC, (long)EditProc);

Si j'ai bien tout compris EditProc me permet d'éditer une zone spécifique dans une fenêtre. Et  apparemment le compilateur n'aime pas le forcage de type.

Et oui j'ai bien utilisé InitCommonControl() et ce juste avant d'initialiser ma variable HIMAGELIST.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 mai 2006 à 23:06
Ton wpOrigEditProc a l'air d'être un pointeur de fonction. Je vois pas bien pourquoi tu utilise ça avec la fonction SetWindowLong. Cette fonction renvoie une valeur long.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 23:14
Oui c'est bien un pointeur, si j'ai bien tout compris ca permet de modifier les paramètres de ma fenetre mère en fonction du message qu'EditProc renvoit, et donc d'afficher ma treeview dans cette meme zone.

D'ailleur voila la fonction

LRESULT APIENTRY EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{   if (uMsg WM_SETFOCUS || uMsg WM_CONTEXTMENU || uMsg == WM_CHAR ||
                                                             uMsg == WM_KEYDOWN)
                                                                       return 0;
   return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);
}

Ca parlera peut etre mieu a quelqu'un qui a vraiment acquis le concept de zone d'edition dans une fenetre.

Ca n'a peut etre pas de rappport mais si j'enleve la ligne le compilateur me dit qu'il n'arrive plus a linker les différent icones que je souhaite utiliser.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 mai 2006 à 23:23
Ton SetWindowLong fait en fait un sous-classement de la fenêtre (attribue une nouvelle WndProc). Une écriture plus logique serait:
wpOrigEditProc = (WNDPROC)SetWindowLongPtr(hEdit, GWL_WNDPROC, (LONG_PTR)EditProc);
SetWindowLongPtr plutot que SetWindowLong, ca t'évitera des problème si un jour tu passes en 64 bis
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 23:33
Le compilateur ne me reconnait pas la fonction SetWindowLongPtr et je ne la trouve ni dans mes doc API ni sur Msdn. Ca provient d'une librairie spécifique?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 mai 2006 à 23:34
SETWINDOWLONGPTR




___________________________________________
Les plus grands esprits trouvent toujours une solution
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 mai 2006 à 23:36
Si tu la pas, il faut que tu telecharger la Platform SDK

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 23:38
exact je n'ai pas linké la SDK........ Si ca vient de là je crois que je me tire une balle^^
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 23:52
Fausse joie je l'avais bien linké. Pour etre sur g linké la derniere version que j'en avait mais pas de changement. En ce moment je suis avec la version Avril 2005...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 mai 2006 à 23:54
Qu'est ce qui ne marche pas en fait?
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
27 mai 2006 à 23:57
Il ne reconnait pas la fonction!

C:\Program Files\Microsoft Visual Studio\MyProjects\APIX\WinMain.cpp(99) : error C2065: 'SetWindowLongPtr' : undeclared identifier
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 mai 2006 à 00:09
Ben utilise SetWindowLong alors (en 32 bits c'est la même chose). Mais ton psdk doit être mal installé (visual studio ne va pas chercher les headers au bon endroit)
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
28 mai 2006 à 00:20
C'est pas sur j'ai utiliser la SDK pas plus tard qu'il y a 15 jours pour un petit jeu de shoot...SxDl ne pouvant pas fonctionner sans.

En tout cas l'erreur n'est plus. Il ne me reste plus qu'à régler les pb de linkage que ca a soulevé. Merci bien! Avec un peu chance je vais obtenir quelquechose avant que le jour se lève^^
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 mai 2006 à 00:43
Si c'est un pb de link...

#pragma comment(lib, "comctl32.lib")
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
28 mai 2006 à 00:48
En fait le compilateur n'arrivait juste pas à linker les icone utilisé dans l'exemple. Donc a chaque fois que je faisait appel à mon HIMAGELIST il me mettait une erreur de link. Maintenantca marche si ce n'est que je n'ai pas d'image qui s'affiche a chaque node (a mon avis le pb va etre facilement régler quand je chargerais moi meme les icone que j'ai décidé d'utilisé).

Mais puisque tu soulève le # pragma ca sert a quoi exactement?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 mai 2006 à 00:55
C'est pour ton treeview (en général quand tu inclus commtrl.h, tu as aussi besoin de comctl32.lib)
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
28 mai 2006 à 00:58
J'en prend bonne note si je viens a avoir un problème quand je vais le retoucher (cad tout de suite).
En tout cas merci a tout ceux qui m'ont donné de leur precieu temps un samedi soir et surtout a toi vecchio56 sans qui je serais encore en train d'éplucher des docs pour trouver ce qui n'allait pas^^
0
Rejoignez-nous