Création de controles avec classe et librairie perso sans mfc

Soyez le premier à donner votre avis sur cette source.

Vue 5 024 fois - Téléchargée 403 fois

Description

Ce petit programme montre l'utilisation d'une librairie pour créer une instance de classe (des objets fenêtre),
qui s'afficheront à l'écran. Ces objets issus de la classe Cfeuille (déclarée dans la librairie 'LibClassFeuille.lib) contiendront
en plus des fonctions permettant la création des fenêtre et leur gestion, toutes les fonctions d'évènement qui leur sont propres.
La fonction API: LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg...) étant apparement interdite dans une classe, elle sera une
fonction de reception générale des messages, qui selon le HWND transmis répercutera ces messages vers une autre fonction
WinProc faisant partie intégrante des objets de fenêtre.

Conclusion :


Le programme principal 'CF1.cpp' compilé en 'ClasseFenetre.exe' dans le répertoire Debug & retail , va faire référence à la librairie LibClassFeuille.lib.
L'entête hFAC sera également appelé.
Le programme principal va créer deux fenêtres (2 instances de classe de Cfeuille) qui seront FenA et FenB
Elle va les faire apparaitre à la position 0,0 et avec 0 de longueur et 0 de hauteur via les fonctions FenA.Creer(hInstance, nSgoxCmd, pWa);
pWa va être un pointeur de type WNDPROC pointant sur la fonction de gestion générale des messages pour qu'ainsi, chaque objet feuille sache
quelle est la fonction générale de traitement des messages et l'atribue à lpfnWndProc, lpfnWndProc qui est un des élément de WNDCLASS.
On fera donc pointer pWa sur WinProcGeneral en disant pWa = WinProcGeneral;
Puis, dans WinProcGeneral, chaque message selon le hWnd reçu va envoyer toutes les informations (HWND, UINT, WPARAM et LPARAM à la fonction Winproc de l'objet
feuille intéressé.
Dans le programme présent, seul les messages de FenA sont traités pour montrer la différence. Ainsi, fermer la fenetreA terminera le programme alors que cela
ne fermera que la fenêtre si on ferme la fenetre B. cliquer dans la zone hDC de la fenetre A va la redimensionner en 100 par 100. La m^me chose dans la fenêtre B ne donne rien.
Dans et exemple, seul le click gauche de souris et la fermeture de fenêtre sont traitées.

Fichiers du programme:
Dans le repertoire ClasseFenetre, vous trouvrez la librairie LibClassFeuille, l'entête hFAC.h et le fchier programme CF1.cpp. le répertoire DEBUG contient le programme compilé en EXE
Dans le répertoire LibClassFeuille se trouve le fichier hFAC.h et cFAC.cpp qui sont les sources de la librairie

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
dans la zone de recherche au dessus, tu regles sur 'forum' et tu mets GWL_USERDATA en critere. Tu verras que ymca2003 a deja fait cet exemple plusieurs fois.
s@ldon
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
Dans la classe Fenetre, j'ai rajouté en privé un pointeur vers une variable de type Fenetre.
A la premiere fonction de la classe appellée, j'y stocke this.
mais dans la fonction WindProc, je ne peut tjrs pas appeller d'autres fonctions.
Je l'ai peut etre mal utilisé...

Fenetre.cpp:65: invalid use of member `Fenetre::pt' in static member function
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Faut conserver pointeur 'this' dans un membre du WNDCLASSEX a la creation et aller le rechercher quand besoin.
s@ldon
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
salut
je viens d'essayer d'integrer la fonction WindProc dans la classe Fenetre en static, mais je n'arrive pas a appeller une autre fonction de la classe via la fonction WindProc.

Fenetre.cpp:63: cannot call member function `int Fenetre::InitObjets(HWND__*)'
without object
cs_LaPatoshe
Messages postés
53
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
19 décembre 2009

Merci, je vais regarder cela de plus près et essayer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.