Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONTROLEZ LE REDIMENTIONNEMENT ET LE DÉPLACEMENT DE VOS FENÊTRES


Information sur la source

Catégorie :Formulaire Niveau : Initié Date de création : 04/07/2003 Date de mise à jour : 04/07/2003 14:03:58 Vu / téléchargé: 4 560 / 661

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Ce petit code de subclassing va vous permettre de :

- controler le redimentionnement de vos fenêtres et donc le limiter à vos souhaits (par exemple, minimum et maximum) et aussi éviter de le faire une fois que la fenêtre est déjà redimentionnée (événement Form_Resize) ce qui ne faisait pas un très bel effet. C'est par exemple ce que fait la fenêtre des consoles win32.
- controler leur déplacement (pas très réussi par windows ça..).
- savoir quand elles ont été déplacées (ajout d'un événement Form_Move que VB ne possède pas).
- savoir quand elles vont être redimentionnées (et donc redimentionner vos controles avant le redimentionnement de la fenêtre).

J'ai ajouté 2 exemples :
- faire que la taille soit un multiple de 40.
- émanter la fenêtre sur les bords de l'écran quand elle s'en rapproche.

Points abordés :
- subclassing avec gestion des messages WM_SIZE, WM_SIZING, WM_NCCALCSIZE, WM_MOVE et WM_MOVING.
- remplissage d'une structure (et d'une variable en général) à partir de son pointeur avec CopyMemory.
 

Source

  • Voyez dans le zip, c'est plus sympa !
Voyez dans le zip, c'est plus sympa !

Conclusion

Si vous avez des remarques, elles sont les bienvenues...

mehdibou (ou Mehdi si vous préférez).
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Alan71 le 04/07/2003 15:21:19

9/10 parce que C pas du tout mon style de donner 10/10 (mais ca les vaut)

signaler à un administrateur
Commentaire de EBArtSoft le 04/07/2003 15:46:07 administrateur CS

merci ;-)

signaler à un administrateur
Commentaire de lumesh le 04/07/2003 18:33:05

oui ! une remarque !
merci bcp ;)  tu me reconnaitra :)

signaler à un administrateur
Commentaire de Afyn le 12/08/2003 21:11:37

J'ai point de commentaire, mais j'ai qq questions
- C'est quoi le Sub-Classing ?
- Pour quoi quand on déplace une fenêtre sur Windons, ca bloque
  plein d'événements (quand on clique sur l'option animer les
  fenêtres c'est pire et ca prend plein de ressource au proc...)
Si vous avez des explications j'suis preneur, et si on peut intercepter les évènements quand on déplace n'importe quelle fenêtre j'suis preneur aussi ...
Merci coop
Afyn
Navedac

signaler à un administrateur
Commentaire de Alan71 le 13/08/2003 18:40:32

Mehdi est en vacances, donc, je te fais une reponse partielle (Mehdi est plus charismatique que moi)

le sub-classing est une technique permettant de dérouter les messages provenant de Windows parce que l'ami VB ne le fait pas de lui-même. En fait, ya rien a dire de plus... Enfin bref, ca pose un super probleme, c'est que si t'essaie de 'pauser' le prog, c'est plantage assuré (de quoi devenir parano de la sauvegarde.) Pour ca, il faut desactiver cette fonction quand on a fini de la developper (en testant si on est dans l'IDE par exemple, API ModuleFilename je crois...) Ya un tuto je crois sur www.allapi.net, lis-le pendant que tu télécharges l'api-guide, même si il dit pas grand chose.

Perso, j'ai pas compris la 2nd question mais pour la derniere, oui ca doit être possible, en récupérant préalablement le handle de la fenetre à sub-classé.

J'espère t'avoir aidé (si si ! sincérement !)

PS:Message à l'attention de Mehdi> ton screenshot, tu l'a fait sur un 9x ?
Message à l'attention des lecteurs de ce commentaire> nous pouvons remarquer que Mehdi est une personne très humble, il n'a pas cité son nom une seul fois dans la source, ce qui fait que j'ai du me gratté la tête pour savoir d'où venait ce zip déposé sur mon desktop.

signaler à un administrateur
Commentaire de mehdibou le 18/08/2003 11:58:25

Merci Alan[71] (tu préfère avec ou sans ? ;)) pour cette réponse.

Pour expliquer le subclassing (ou sous-classement en français), il faut comprendre un principe de base de la partie "user" (ou utilisateur pour Mr. Molière ;)) de Windows et du fonctionnement des applications windows :
Chaque fenêtre possède une queue (une liste) de messages. Suivant les actions de l'utilisateur ou des autres applications, Windows envoie aux fenêtres des messages divers concernant la fenêtre et ses controles (on dit que Windows envoie les messages, mais en fait, il les ajoute à la queue). L'application, ensuite, récupère les messages de la liste puis appelle une fonction qui va s'occuper de gérer ces messages/événement (elle est appelée WindowProc (procédure de la fenêtre)). C'est ce que fait VB sous la forme des événements tels que Form_Resize, Command1_Click, etc... Cependant, il nous est impossible à présent de gérer nous même les autres messages, ceux que VB ne gère pas. Comment faire ?
Il suffit d'indiquer à Windows que la WindowProc n'est pas celle de VB mais une à nous, ceci est fait en appellant SetWindowLong (sert à modifier les attributs de la fenêtre).
Notre WindowProc peut à présent gérer tous les messages envoyés à la fenêtre. Il suffira d'appeler CallWindowProc pour que Windows appelle la WindowProc de VB.
Lorsque le prog est terminé, on redonne la main à la WindowProc de VB pour éviter que Windows appelle notre fonction qui n'existe plus !
C'est ce qu'on appelle du subclassing, c'est-à-dire refaire la même chose par-dessous avec des personnalisations.

Pour la seconde question, c'est simplement parce que c'est inutile d'envoyer les événements lorsque la fenêtre est en déplacement.
Pour l'option animer les fenêtres, l'utilisation supérieure des ressources est dûe au fait que Windows doit redessiner la fenêtre elle même à chaque déplacement ainsi que les fenêtres en dessous.

Intercepter le déplacement de toutes les fenêtres est tout à fait possible, je vois deux solutions :
- soit énumérer toutes les fenêtres et faire comme l'a dit mon très cher camarade ;), subclasser (ho la pas belle francisation !) toutes les fenêtres.
- l'autre solution consiste à utiliser les fonctions de Hook (comment vous traduisez ça ? dans le dico, c'est crochet, hameçon) de Windows qui offre des possibilités semblables au "subclassing de base".

Si t'as d'autres questions, n'hésite pas, le site est fait pour ça :)

PS:Message à l'attention d'Alan> oui, je l'ai fait sur 98se.
Bien sûr les captures ne prennent pas le curseur, je l'ai collé à la main ("huhu le trucage !" allez-vous dire, mais vous obtiendrez un écran similaire si vous essayez), c'était surtout pour bien montrer que le curseur n'est pas sur le cadre de redimentionnement.
Message à l'attention des utilisateurs de la source> excusez mon humilité, je n'ai pas pour habiter de me citer dans mes sources (ben oui, je sais qu'elles sont de moi, écrites pour moi à l'origine (en général)) ni écrire 300 lignes de copyright et/ou de pub.
Excusez moi pour la faute d'orthographe sur la capture, certains diront que ce n'est pas grave mais je n'ai pas pu dormir pendant trois jours à cause de ça (nan, rassurez-vous je plaisante)
- haha, qu'est-c'qu'on s'marre...
- qu'est-c'que tu crois ? j'ai fais l'école du rire !
- no comment

signaler à un administrateur
Commentaire de Afyn le 18/08/2003 17:50:20

Merci pour toutes ces explications

Je peux faire tourner un prog en tâche de fond sans qu'ils soit
perturbé par les messages de fenêtres Windows avec tout ça ?

A+
Afyn
Navedac

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.