Fenêtre Windows de base en C++

cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006 - 24 mai 2005 à 11:10
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010 - 24 mai 2005 à 19:02
Bonjour à tous,

Je voudrais savoir comment programmer une fenêtre Windows de base en C++, cad encapsulé dans une classe (mais pas de MFC). J'ai vue sur un site anglais un exemple qui expliquait (en gros) que le problème majeur était l'encapsulation de la procédure de fenêtre qui a un type de retour qui n'est pas compatible. Mais bon c'est en anglais et ps mal de trucs m'échappent. Est ce que qq'un pourrait m'expliquer le principe, et est ce qu'il existe un site (en français si possible:-)) où il y a des explication et des exemples ?

Merci

Tintin 72

5 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 mai 2005 à 11:32
Plusieurs exemples dans mes sources (serial et paint je pense).
Le pb est qu'il faut mettre la WndProc en static et ariver à associer le HWND à un pointeur sur la classe d'encapsulation.

En gros voici les étapes :
- faire une classe qui va encapsuler les données de la fenêtre (dont le HWND) et traiter les messages.
- créer une mémthode statique WndProc et des methodes membres de gestion des messages (OnPaint, OnCreate...)
- les méthodes membres ne nécessiteront pas de paramètres HWND car déjà dans la classe.
- lors de la création de la fenêtre par CreateWindow, passer en dernier param un pointeur sur un objet de la classe d'encapsulation.
- lors du traitement des messages dans la méthode statique :
- si msg = WM_CREATE ou WM_NCCREATE, récupérer l'objet associé dans le CREATESTRUCT pointé par lParam
puis associer cet objet au HWND par SetWindowLong. Sauvegarder également le HWND dans l'objet.
- pour les autres messages, récupére l'objet associé au HWND par GetWindowLong.
- appeler la méthode membre de gestion du message
0
cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006
24 mai 2005 à 12:14
Merci pour ces explications. Je vais essayer de mettre en pratique tout ça ;-)

Toutefois, au vue de l'implémentation (pas évidente) je me pose 2 questions par rapport au code classique en C:
1) Y a t-il une différence au niveau performance ?
2) Est ce que celà vaut le coup de tout encapsuler, ou est ce juste nécessaire dans
certain cas ?

Tintin 72
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 mai 2005 à 12:18
Niveau perf : pas de différences
Avantage : permet de gérer + facilement un gros projet en mettant dans des classes de base des comportement similaires.
de plus en mettant virtuelles les méthodes de traitement des messages dans une classe WindowBase, une seule WndProc est nécessaire qui appelle les fct virtuelles qui en fonction de leur redéfinition dans des classes dérivées agit différement.
0
cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006
24 mai 2005 à 12:31
Ok, merci :-)

Tintin 72
0

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

Posez votre question
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
24 mai 2005 à 19:02
Sinon je te propose egalement ma source pas complète mais simple
http://www.cppfrance.com/code.aspx?ID=28962


mayonaise tournera, bientôt, très bientôt...
0
Rejoignez-nous