Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1635 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Ouverture de fenetre sous windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ouverture de fenetre sous windows

n°1471341
buzzkaido
Posté le 06-11-2006 à 19:50:41  profilanswer
 

Bonjour !
 
Je developpe une petite appli sous windows, sans utiliser les MFC.
 
Je souhaite ouvrir une fenetre du type pop-up pour y mettre des outils de l'application (genre comme les palettes flottantes de photoshop)
 
Pour ce faire, je declaire une window class :
 

Code :
  1. maWindowClass.style = 0;
  2. maWindowClass.lpfnWndProc = maFonction;
  3. maWindowClass.cbClsExtra = 0;
  4. maWindowClass.cbWndExtra = 0;
  5. maWindowClass.hInstance = parentHINSTANCE;
  6. maWindowClass.hIcon = NULL;
  7. maWindowClass.hCursor = NULL;
  8. maWindowClass.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
  9. maWindowClass.lpszMenuName = NULL;
  10. maWindowClass.lpszClassName = "Ma fenetre";


 
Puis j'ouvre ma fenetre avec createWindow()
 
Ma fenetre est ouverte par une fonction contenue dans une classe, qui contient dans ses données les infos sur la fenetre, du style :
 

Code :
  1. maClasse
  2. {
  3. pleinsDeFonctionsEtDeVariables
  4. WNDCLASS maWindowClass;
  5. HWND maWindowHWND;
  6. }


 
Je souhaiterais maintenant que la fonction "maFonction" fasse partie de la classe, et c'est là que ca coince !
 
Si je declare un truc du genre :
 

Code :
  1. maClasse
  2. {
  3. pleinsDeFonctionsEtDeVariables
  4. WNDCLASS maWindowClass;
  5. HWND maWindowHWND;
  6. LRESULT CALLBACK maFonction(HWND, UINT, WPARAM, LPARAM);
  7. }


 
J'obtiens ces 2 erreurs :
 

Code :
  1. error C3867: &'maClasse::maFonction' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'maClasse::maFonction' pour créer un pointeur vers membre
  2. error C2440: '=' : impossible de convertir de 'LRESULT (__stdcall maClasse::* )(HWND,UINT,WPARAM,LPARAM)' en 'WNDPROC'


 
 
Pourquoi ? Comment ? Je ne vois pas le rapport !
 
J'ai essayé avec differentes notations, pointeurs.... imposssible de donner l'adresse d'une fonction membre de la classe à ce parametre : maWindowClass.lpfnWndProc
 
Y'a-t-il une raison precise ? Ou je m'y prend mal ?
 
PS : je peux m'en passer, mais j'aimerais regrouper toutes les fonctions utiles à un objet dans sa classe, histoire que ce soit plus propre...

mood
Publicité
Posté le 06-11-2006 à 19:50:41  profilanswer
 

n°1471391
IrmatDen
Posté le 06-11-2006 à 22:45:03  profilanswer
 

Salut,
 
Pour utiliser les callbacks dans des classes, le plus simple est de les déclarer en statiques. J'ai croisé une autre méthode, mais j'arrive pas à remettre la main dessus (et ne l'ayant pas appliqué, je m'en rappelle pas du tout :D ).
 
Tu auras plus de détails sur ce problème dans un article de CodeProject.


---------------
.
n°1471433
Novsirion
Posté le 07-11-2006 à 08:13:51  profilanswer
 

Pourquoi tu n'utilise pas wxWidgets pour les interfaces?

n°1471470
buzzkaido
Posté le 07-11-2006 à 09:43:40  profilanswer
 

Je n'utilise pas wxWidgets car c'est dans le cadre du developpement d'un plugin (dll) pour un logiciel et l'une des contraintes est d'utiliser que les fonction win32.
 
Une fois les fenetres correctement crées et initialisées, le logiciel hôte du plugin fourni tout le necessaire pour construire une interface, gerer les evenements....
 
Mon seul probleme est de "structurer" convenablement les classes de bases car le plugin pourra ouvrir jusqu'a une dizaine de fenetres similaires (comparaisons de resultats), il me faut donc un modele simple et clair :
 
Une classe cMaSuperFenetre qui contienne :
* les données à visualiser
* des données propres à la fenetre : position, taille, choix des couleurs du graphique...
 
Et qu'ensuite je puisse en instancier autant que necessaire (dans la fenetre principale du plugin, il y a un bouton "Ajouter une vue" )
 
Voila !
 
Merci pour le lien vers l'article, ca va m'aider serieusement à faire un truc propre !

n°1471528
IrmatDen
Posté le 07-11-2006 à 11:37:42  profilanswer
 

Je viens de retrouver le lien expliquant les callbacks non-statiques, mais je  ne suis pas convaincu que ce soit si pratique (un callback est toujours utiliser en tant que wrapper), ni même utilisable dans le cas des callbacks win32.
 
Ceci dit, voilà le lien, t'auras plus le temps de le lire que moi :)

n°1471534
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-11-2006 à 11:45:11  profilanswer
 

buzzkaido a écrit :

Je n'utilise pas wxWidgets car c'est dans le cadre du developpement d'un plugin (dll) pour un logiciel et l'une des contraintes est d'utiliser que les fonction win32.


dans ce cas, tu fais ton appli en C, pas en C++. Win32 a été conçu pour être utilisé en C.


---------------
J'ai un string dans l'array (Paris Hilton)
n°1471600
buzzkaido
Posté le 07-11-2006 à 14:16:12  profilanswer
 

IrmatDen : merci ! instructif....
 
Harkonnen : bah oui, mais le sdk que l'on m'a fourni est en c++ ! Et puis les classes c'est quand meme vachement pratique pour instancier plusieurs objets avec les memes propriétés/comportements...
 
Surtout quand on ne sait pas à l'avance le nombre de ces objets qui vont etre instanciés par l'utilisateur.
 
C'est sur, je pourrait le faire en C, mais le C++ permet beaucoup plus de choses, enfin surtout beaucoup plus de logique (à mon gout)
 
Si c'est au prix de petites complications sur 1 seul element (les callbacks non-statiques) je suis pret à payer !
 
Et vive les Atreïdes :-)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Ouverture de fenetre sous windows

 

Sujets relatifs
Propriété d'une page HTML à l'ouverture (pas window.open())Mini lecteur windows media player 11 pour un site web
ouverture - fermeture de la connexionlex ou flex sous windows
Script pour ouverture VPNThread sous windows...
Problème de fenêtre d'erreur lors de la compilationClosepopup et ouvrir une page dans la fenêtre précédente ?
[Résolu]Fenêtres existentes et fenêtre activeOUVERTURE fenetre windows pour confirmation suppression...
Plus de sujets relatifs à : Ouverture de fenetre sous windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR