Afficher une fenetre devant une autre

Signaler
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Bonjour à tous,

Voilà, tout simplement j'aimerais placer une fenetre devant une autre. Pas de fenetre devant toutes les autres, juste une devant une autre. J'ai les 2 handles, et j'essaye un peu tout avec SetWindowPos mais je n'y arrive pas.
Le truc c'est qu'avec SetWindowPos, on peut définir derrière quelle fenetre se placer, mais pas devant laquelle se placer.

Et le problème, c'est que je ne peux déplacer que la fenetre qui est toujours devant l'autre.

Avez-vous une idée ? merci d'avance

MadMatt

11 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
Salut MadM@tt,
déjà vu ce genre de fenêtres, mais bidouilles ou argument, je sais pas....

en bidouile çà pourrrait donner juste de recevoir (et empêcher?) le LOSTFOCUS, peut-être jouer avec .SetFocus si c'est une fenêtre de ton appli

je crois aussi avoir vu passer une source qui simule un vbModal sans bloquer le process parent...

ps : message laissé sur ta dernière source, pas d'alerte?
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Salut,

Eh bien en fait c'est un peu plus compliqué que ça , il se trouve que la fenetre en question à mettre devant une autre c'est un bouton. En fait le programme que j'essaye de faire consiste à placer un 4è bouton à gauche des 3 classiques des barres de titre des fenetres (minimiser/agrandir/quitter) pour ajouter des commandes génériques.

Donc dans mon cas, je sous-classe (avec le hook d'EBArtSoft : injection d'une DLL dans les process) toutes les fenetres ouvertes et visibles et à chaque déplacement d'une fenetre, je déplace le bouton associé.
Seulement le bouton se trouve derrière chaque fenetre (je m'en rend compte si je le place quelques pixels plus haut, il est derrière la fenetre). Et donc j'aimerai le placer devant, sans déplacer la fenetre en question (car sinon ça refait un évenement MOVE, donc il faut redéplacer le bouton, donc on boucle...).

Bref, je galère un peu (et ça me fait *** de bloquer sur ça alors que c'est si simple comparé au reste du code que j'ai encore à faire pour le reste).

PS : pour la source sur lequel t'a commenté, désolé mais effectivement je comptais mettre à jour avec les évenements que tu proposais mais je me suis laissé entrainé par cette nouvelle appli et je n'en sort plus la, j'avance à 2 à l'heure ^^
Bref j'espère avoir le temps d'ici peu de prendre en compte tes remarques

MadMatt
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
et tu ne peut pas simplement appliquer ta fenêtre (bouton) au parent? (avec setparent)

tu as jeté à un oeil à la source de DKS ?



<li>
20/11/2004





[../codes/BOUTON-REDUIRE-DANS-SYSTRAY-DANS-BARRE-TITRE-LOOK_27709.aspx


BOUTON RÉDUIRE DANS SYSTRAY DANS LA BARRE DE TITRE AU LOOK XP (COMPATIBLE TOUT WINDOWS)






Cela faisait un bon moment que je cherchais à faire ceci, et j'ai enfin réussi, ouf !

Il s'agit d'une source qui est un mix de plusieurs sources de...
BOUTON RÉDUIRE DANS SYSTRAY DANS LA BARRE DE TITRE AU LOOK XP (COMPATIBLE TOUT WINDOWS)]
par DARKSIDIOUS


</li>







(test du c/c depuis la fiche membre, je ne sais pas si le tooltip va passer )

bon courage pour tes projets alors ^^

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Eh bien justement je suis parti de cette source. Seulement il fait pareil : subclassing de la fenetre en question et à chaque Move, on replace le bouton au bon endroit (au début on fait SetParent du bouton pour le mettre dans le bureau).
Pour ma part le subclassing est impossible sur une fenetre d'un autre process sans hook, donc j'ai fait ça, mais sinon les 2 codes se ressemblent. Mais le hook doit intercepter les messages légèrement différements et avec ce hook le bouton est derrière la fenetre.

Parce que (à moins que je me trompe), si je fais un SetParent pour placer mon bouton dans une autre fenetre, il sera dans la fenetre et impossible de le placer sur la barre de titre.

Enfin de toute façon je crois que je vais laisser tomber, 1 fois sur 5 y'a une fenetre qui gèle et impossible de savoir d'ou ça vient (si ça se trouve ça vient de la DLL en ASM d'EBArtSoft, bref, je controle trop peu de choses). En plus, ça utilise un peu de ressources juste pour une question d'ergonomie, c'est du gachis. Je vais me replier vers une solution moins ergonomique, du style un programme dans le systray avec une liste des taches/processus, et des options dessus. Mais ça sera encore un process viewer..... J'aurais préféré un truc plus original et pratique.

MadMatt
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,

Juste une idée "à la neuneu"...
Si toutes les fenêtres étaient dans ton appli, la gesteion serait possible avec Zorder.

Quid, alors, de créer plusieurs Forms et d'y mettre (avec SetParent) les fenêtres avec lesquelles tu veux "jouer", puis de jouer avec Zorder comme tu l'entends ...
Idée "à la neuneu", comme tu le vois ...
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Pas si bête que ça...
Il y'aurait 2 barres de titres pour chaque fenetre. Je pourrais supprimer la barre de titre de mes fenetres pour qu'on ne les voit pas mais avec du recul ça fait un système vraiment lourd pour si peu : rajouter un bouton à chaque fenetre.
Déjà que rien le le hook de toutes les fenetres ouvertes ralenti le système, et plante parfois, c'est trop risqué pour un résultat acceptable.

J'envisage donc de changer de principe : une sorte de gestionnaire des taches, mais très simplifié, disponible dans le systray (ouverture/fermeture très rapide), affichage uniquement de la liste des taches et avec le clic droit un menu et des possibilités d'actions multiples... Pas un gestionnaire des taches de base quoi... Je sais pas ce que vous en pensez.

Pff, j'ai du mal à trouver un truc plus pratique qu'un simple gestionnaire des taches. Si vous avez d'autres idées (même loufoques) n'hésitez pas ;-) (recréer un bureau, une barre des taches...)

MadMatt
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
indique nous peut-être un peu plus ton idée?

de ce que j'en ai compris en fait tu voudrais "manipuler" certains process. et donner la main vers tes fonctions à l'utilisateur par un système plus pratique. l'idée ici étant de dupliquer un bouton "universel" vers chaque fenêtre touchable.
c'est çà?

si oui, prend l'exemple de VB6....
nouveau projet, f5, j'ai ET l'IDE, ET la form en cours d'execution
dans les tâches et dans les applications j'ai les 2 (VB6.exe et Projet1.exe)
mais dans les process je n'ai que VB6.exe ...

donc faut déjà nous aiguiller sur "à quoi donnes-tu la main"
chaque fenêtre visible?

pourquoi pas juste observer le survol de la souris sur la barre des tâches et avoir une sorte d'infobulle "utilisable" au survol des boutons des applications/fenêtres ?
juste avec windowfrompoint çà devrait être bon

oui il y a toujours le cas des groupes, mais c'est un début d'idée

une autre ?
umm.... plus ou moins ce que tu viens de dire (2e barre des tâches) un ptit menu comme MAC avec les icônes animées, qui reprendrait les fenêtres ouvertes. un peu le "bidule chiant d'office", mais en pas chiant ^^

plus d'infos et on pourra se creuser avec toi
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
tiens et pourquoi pas glisser une icône de ton appli (avec interface donc) vers la fenêtre voulue?

très simple à mettre en place, aucune ressource "en continu"

reste qu'à faire çà avec quelques images un peu originales et çà tourne.., non?

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Merci pour ton intérêt à la question.

En fait, c'est l'éternel question des nombreuses possibilités "systèmes" de windows mais qui ne sont malheureusement pas accessibles naturellement. Ce que je veux, c'est tout simplement offrir aux utilisateurs la possibilité d'accéder à ces fonctions (priorité/opacité des fenetres/fenetres always on top/limiter utilisation CPU d'un processus etc....) rapidement et facilement, en 1 seule appli. Donc pas avoir à lancer une usine à gaz du style Process Explorer, car il faut que ça tourne en permanence en tache de fond.

Pour le coup d'observer le survol de la souris sur une barre de titre, il faut que je détecte uniquement quand la souris survole la barre de titre (et pas la fenetre entière), donc windowfrompoint ne suffit pas (et je sais pas si c'est possible).

Pour un menu style MAC, pourquoi pas mais j'aimerais pas trop faire doublon avec la barre des taches en fait. Et pour remplacer la barre des taches (j'ai déjà essayé), c'est pas si évident : le systray, le style Windows, les barre d'outils (du style lecteur windows media intégré), le bouton démarrer etc... compliquent beaucoup le boulot.

Pour ta dernière proposition : "


tiens et pourquoi pas glisser une icône de ton appli (avec interface donc) vers la fenêtre voulue?"
Je t'avoue que je n'ai pas trop compris.

Pour l'instant, j'en suis à une liste des taches qui s'affiche après un appui d'un icone dans le systray (j'y mettrai un raccourci clavier). Les fonctionnalités sont accessibles via un clic droit sur un item de la liste. Et ça tourne pas mal je mettrais peut etre ça en ligne ce soir ou demain.

Mais si on peut trouver mieux que ça pourquoi pas






MadMatt
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
pour la barre MAC, je ne parlais pas de celle par défaut.

et c'est vrai qu'en cherchant...., il a fallu plusieurs tentatives de mot-clés pour trouver ce à quoi je pensais....

on ne se rend pas trop compte mais çà donne déjà une idée ;)
les icônes grossissent (*3 environ) au survol de la souris puis se replacent et reprennent leur taille progressivement selon leur distance par rapport à la souris (effet supplémentaire par rapport à un simple OVER/OUT)

pour le glisser, je voulais dire "partir de ton application pas un mousedown" (sur une image ou... la form coupée, un truc pas trop moche) et lâcher à la destination.
un drag & drop inter-forms
tu as alors le UP, windowfrompoint pour le handle, et t'as plus qu'à aviser...

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Ah oui effectivement pour la barre Mac l'effet est sympa, ça me dit quelque chose. Mais pour ça justement ça peut prendre beaucoup de place à l'écran et rendre le tout confus pour un utilisateur lambda : il risque de la confondre avec des programmes à lancer, ou alors il risque de ne pas comprendre pourquoi faire un doublon avec la barre des taches.
Pour le drag'n'drop ça peut etre pas mal je garde l'idée de coté, je vais voir si c'est possible un drag'n'drop depuis le systray (pour éviter d'avoir une form qui traine toujours sur l'écran). Après est-ce que les gens penserait à faire un drag n drop.. A voir.

Enfin une première version est à peu près bouclée, je l'ai postée :
http://www.vbfrance.com/codes/WIN-OPTIONS-AVANCEES-SUR-FENETRES-PROCESSUS-WINDOWS-CPU_47970.aspx

MadMatt