Accueil > Forum > > > > Sous classer plusieurs controles dans une classe
Sous classer plusieurs controles dans une classe
jeudi 5 avril 2007 à 23:27:30 |
Sous classer plusieurs controles dans une classe

julien_boss
|
Bonjour, je vous détail l'ossature de ma classe, qui crée une fenetre : jappelle une methode Create() qui va ... créer la fenetre, je fais passer dans le dernier parametre de la fonction CreateWindowEx() un pointeur sur ma classe. Je récupére une premiere fois ce pointeur dans le message WM_CREATE du wndproc de la fenetre (qui est une méthode de ma classe) grace à la structure LPCREATESTRUCT contenu dans le lParam, je "sauvegarde" ce pointeur grace à : SetWindowLong(hwnd, GWL_USERDATA, ptrClasse); D'autres méthodes de ma classe gérent certains messages, par exemple le msg WM_PAINT (la méthode s'appelle MsgPaint() ). Pr les appeler, je récupére le ptr de ma classe grace à GetWindowLong() et je fais : ptrClasse->MsgPaint(...);
Voilà, passées ces qq explications, j'expose mon probleme : dans la méthode MsgCreate() de ma classe(qui traite le msg WM_CREATE), je crée plusieurs boutons sur ma fenetre, notamment plusieurs editbox. Je souhaite les sous classer, donc dans la méthode MsgCreate() je fais ceci : for(int i=IDD_ADD_LOG; i<=IDD_ADD_MAIL; i++) Edit = (WNDPROC)SetWindowLong(GetDlgItem(hwnd, i), DWL_DLGPROC, (long)EditWndProc); //erreur 3
WNDPROC Edit est une variable protégée de ma classe, et EditWndProc une méthode protégée de ma classe, voici son implémentation :
LRESULT CALLBACK EditWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { if (message==WM_KEYDOWN && wParam==VK_RETURN) { SendMessage(GetDlgItem(m_hWnd, IDD_ADD_OK), BM_CLICK, 0, 0); //erreur 1 return 0; } return CallWindowProc(Edit, hwnd, message, wParam, lParam); //erreur 2 }
J'ai plusieurs msg d'erreurs : si je déclare la fonction EditWndProc comme static, j'ai : erreur 1 : "Invalid use of member maClasse::m_hWnd in static member function" erreur 2 : "Invalid use of member maClasse::Edit in static member function" Si j'eneleve le mot cle static de la déclaration de la fonction, j'obtiens ce msg d'erreur : erreur 3 : "Aggregatte value used where an integer was expected", ceci concerne le dernier param de SetWindowLong
Voilà je ne comprends pas ces erreurs, comment dois je procéder selon vous ? Merci :)
|
|
vendredi 6 avril 2007 à 11:35:56 |
Re : Sous classer plusieurs controles dans une classe

juju12
|
Réponse acceptée !
Déjà pour les erreurs 2 et 3 c'est tout à fait normal : si ta méthode est statique, elle n'appartient à aucune instance de classe, en particulier ne reçoit pas de pointeur this...et est donc incapable de savoir à quelle instance se réfèrent m_hwnd et Edit... Pour l'erreur 3, je pense que tu avais compris puisque tu as voulu déclarer la méthode statique: le problème est que la fonction WndProc ne peut être une fonction __thiscall (soit membre de classe) Pour sortir de cette impasse : tu sauvegardes dans chaque fenêtre au moment de la création (avec SetWindowLong, GWL_USERDATA) un pointeur sur la classe qui gère la fenêtre. Tu déclares la procédure EditWndProc en membre de classe Après, tu déclares une méthode WndProc (celle que tu passeras en paramètre dans le SetWindowLong de MsgCreate) en statique (ou friend) qui se chargera d'appeler chaque classe de la façon suivante :
LRESULT WndProc(...) maClasse*pClass=reinterpret_cast<maClass*>(GetWindowLong(hWnd,...GWL_USERDATA)); pClass->EditWndProc(...);
et voila, j'espère que c'est compréhensible
|
|
vendredi 6 avril 2007 à 21:36:37 |
Re : Sous classer plusieurs controles dans une classe

julien_boss
|
Merci bcp ca fonctionne. Bon ca me gene un peu d'avoir une procédure de traitement des msg qui en appelle une autre, donc d'en avoir 2, mais s'ils faut passer par là, ben tant pis. Merci pour les connaissances apportées :)
|
|
Cette discussion est classée dans : erreur, fenetre, classe, hwnd, méthode
Répondre à ce message
Sujets en rapport avec ce message
plusieur fenetre mais une seule en mémoire... [ par Xs ]
Bon, voila.Quand je fais une nouvelle fenetre avec un code ressemblant a ca : hwnd = CreateDialog(...);ShowWindow(hwnd,SW_SHOW);......bon, et bien il
Dll Visual Aide [ par TheMaster ]
Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa
Une fenetre animee transparente [ par anthraxx ]
Anthrax ignisque -- Le charbon et le feu C la seconde foi ke je poste sur ce sujet, mais j'ai un autre probleme. En gros: j'ai une fenetre transparent
Inline asm + classe = erreur! [ par Darkneon ]
Salut a tous.Lorsque je mets du codes assembleur dans ma classe le compilateur me renvoit l'erreur suivante."Inline assembly not allowed in inline and
refresh !!!! [ par cedcrow ]
Salut, J'ai un petit prob de refresh de fenetre. Je m'explique :à partir d'une appli mère A, je lance une appli fille B par la méthode_spawnl avec com
Utilisation d'une fonction callback [ par laurentl2000 ]
Bonjour, Voici une fonction callback destinée à envoyer les titres des fenêtres IE ouvertes dans une listbox... BOOL CALLBACK EnumWindowsProc(HWND hwn
Ou est mon erreur.... [ par ordy ]
Bonjour, est ce que quelqu'un peut dire ou se trouve mon erreur.car dans l'execution de mon application il n'execute cette tache, mais il ne demarre p
Trouver le hWnd d'une fenetre avec un hInstance [ par PinkRabbit84 ]
Comme puis-je faire pour avoir le HWND de la fenetre principale avec le HINSTANCE de l'appMerci d'avancePinkRabbit84
Classe et méthode [ par payen ]
Bonjour,J'ai défini une classe avec un ensemble de méthode. Je dois créer une nouvelle méthode pour cette classe, mais elle doit être dans un autre fi
Probleme : error LNK2001: unresolved external symbol... [ par Mr.X ]
Tous d'abor bonjour, quand je compile mon programme (visual c++ 6.0), il m'affiche cette erreur, ece que quelqu'un pourrais l'aider ? :Main.obj : erro
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|