Accueil > Forum > > > > SubClassing et classes
SubClassing et classes
mardi 29 août 2006 à 18:47:39 |
SubClassing et classes

SnOOpss
|
ReBonjour je sais pas ce qui se passe en ce moment mais depuis que je me suis mit aux classes je bloque toute les deux lignes, j'ai du sauter un trop gros paragraphe. class MyBoutton { public: MyBoutton(); bool state; int style; WNDPROC ancienproc; int deco; //fonction void Subclass(HWND hwnd); LRESULT CALLBACK ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam); }; void MyBoutton::Subclass(HWND hwnd) { ancienproc = (WNDPROC)SetWindowLong(hwnd,GWL_WNDPROC,(long)ProcBoutton); } Pourquoi je me retrouve avec le message "error C2440: 'type cast' : cannot convert from 'LRESULT (__stdcall MyBoutton::* )(HWND,UINT,WPARAM,LPARAM)' to 'long'" alors que sans passer par les classes ca marche a chaque fois.
|
|
mardi 29 août 2006 à 19:17:01 |
Re : SubClassing et classes

BruNews
|
Réponse acceptée !
Fonction doit être déclarée 'static'.
ciao... BruNews, MVP VC++
|
|
mardi 29 août 2006 à 19:39:22 |
Re : SubClassing et classes

SnOOpss
|
Je l'ai mit dans le headers pas dans le cpp( sinon pas de compil). J'ai du aussi mettre static WNDPROC ancienproc;
Ca compile mais lors du link error LNK2001: unresolved external symbol "public: static long (__stdcall* MyBoutton::ancienproc)(struct HWND__ *,unsigned int,unsigned int,long)" (?ancienproc@MyBoutton@@2P6GJPAUHWND__@@IIJ@ZA)
Meme si dans le header je met ma fonction en private (toujour le message "unresolved external symbol "public: .....")
La franchement je comprend plus rien, pourquoi ces statics ?
|
|
mardi 29 août 2006 à 19:50:01 |
Re : SubClassing et classes

vecchio56
|
Réponse acceptée !
Tu dois ajouter ceci dans le cpp: WNDPROC MyBoutton::ancienproc; C'est logique qu'une méthode non statique ne peut pas faire l'affaire car elle a besoin d'un objet pour être appelée, contrairement à une méthode statique _____________________________________ Un éditeur de ressources gratuit pour Windows
|
|
mardi 29 août 2006 à 19:52:16 |
Re : SubClassing et classes

SnOOpss
|
En fait le prb viens de ancienproc donc j'ai remit WNDPROC ancienproc; dans le header de ma classe.
mais LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {
..... .... return CallWindowProc(ancienproc,hwnd,message,wParam,lParam);
}
L'erreur viens de la derniere ligne.
|
|
mardi 29 août 2006 à 20:00:05 |
Re : SubClassing et classes

SnOOpss
|
Trop tard j'avait deja posté mais maintenant ca marche (enfin ca deconne a fond mais ca compile et ca linke) la je vais essayer de comprendre ce que j'ai fait car j'ai pas encore tout saisi, j'ai peur que ca deconne encore au niveau de ancienproc.
Merci en tout cas.
|
|
mardi 29 août 2006 à 20:11:57 |
Re : SubClassing et classes

SnOOpss
|
En fait c'etait bien ca. Vu que ancienproc est maintenant statique, je n'en ai plus qu'un dans mon appli, y a pas moyen d'acceder au valeur de ma classe.
LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {
this->style;
est impossible du coup.
C'est impossible avec les classes ? En fait je cherche a sous-classer en evitant de faire passer un pointeur dans GWL_USERDATA et je croyais ca possible avec les classes.
|
|
mardi 29 août 2006 à 20:38:55 |
Re : SubClassing et classes

vecchio56
|
En général, ce qu'on fait c'est mettre dans GWL_USERDATA une référence de l'objet pour pouvoir le retrouver dans la WndProc: LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { MyBoutton* btn = (MyBoutton*)GetWindowLongPtr(hwnd, GWL_USERDATA); btn->... } _____________________________________ Un éditeur de ressources gratuit pour Windows
|
|
mardi 29 août 2006 à 21:23:24 |
Re : SubClassing et classes

SnOOpss
|
Ben en fait c'est justement ce que je cherche a eviter en fait le projet final sera une librairie. Je l'ai deja fini sous la forme d'une dll pour une application (mIRC) et ce systeme de sous-classement pose probleme car 95/100 des dlls utilise cette technique et donc impossible d'en utliser 2 a la fois ( si GWL_USERDATA est utilisé par une dll c'est impossible a l'autre d'en faire autant). Ya aussi la technique d'une liste chainées qui les memorise toute mais je pensais la refaire avec les classes.
|
|
mardi 29 août 2006 à 21:33:17 |
Re : SubClassing et classes

aardman
|
Salut, Tu peux aussi utiliser SetProp() et GetProp(). C'est moins rapide que GetWindowLong(), mais c'est pratique car tu pourra associer plusieurs pointeurs à une même fenêtre. Pour rentre GetProp() un peu plus rapide, on peut aussi utiliser les atoms (msdn).
|
|
Cette discussion est classée dans : hwnd, wparam, classes, wndproc, myboutton
Répondre à ce message
Sujets en rapport avec ce message
thread sur WndProc [ par kidpigeyre ]
G une fonction WndProc chargé de réaliser tout mon programme (application GUI) (avec fenetre windows) et jmerai pouvoir faire un thread de cette fonct
Mélange entre C++ et Win32 [ par vecchio56 ]
J'ai décidé d'encapsuler mes fenêtres dans des classes, mais je me trouve confronté à un problème: en gros je n'arrive pas à changer de WndProc en uti
Où passent mes tabulations... [ par Nebula ]
Bonjour, En utilisant des richedits dans une fenêtre créée avec CreateWindowEx et dont les messages sont traités avec IsDialogMessage, je me suis ape
c++ API Windows : sous classement de fenetre dans une classe [ par _Jonathan ]
Bonjour, je cherche à créer un controle de type Edit en utilisant une classe. Le probleme, c'est que je souhaite redéfinir la procedure callback du co
Comment sortir d'une boucle avec clic sur un bouton Cancel? [ par rolanddegilead1 ]
Bonjour,je suis debutant et je m'arrache les cheveux depuis presque une semaine a cause d'un truc tout bete: en gros je cree une fenetre avec 2 bouton
Programmation C++ [ par spiky31 ]
Bonjour Un peu de code d'abord : class A { public : LRESULT CALLBACK proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); A() {
pb avec iwebbrowser2 C++ API Win 32 [ par spyto ]
Bonjour,Je tourne en rond, je ne vois pas où ça buggue !!!Voilà, j'ai développé un truc en Win32 pur (j'utilise MSVS.NET C++ 2003)J'ai emprunté une so
pb affichage ComboBox dans Dialog [ par Guillemouze ]
Salut tout le monde,j'ai un souci d'affichage de mon combo dans un dialog. Quand je click sur la fleche pour afficher la liste, il ne m'affiche rien!P
PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ]
bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe
1407 : Cannot find window class [ par nemmezis ]
Salut tout le monde, Voilà, ça fait un jour que je bloque sur un problème qui m'empêche d'avancer : je crée une boîte de dialogue modale avec la fonc
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
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
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
|