genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008
-
5 déc. 2008 à 17:09
genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008
-
6 déc. 2008 à 16:35
Bonjour,
Je voudrais qu'au démarrage de mon application, la fenêtre principale soit affichée, de même qu'une dialog box (qui serait active).
J'ai essayé deux choses :
1) Ouvrir la dialog box à la reception du WM_CREATE de la fenetre principale ... mais la fenêtre principale n'est alors pas encore affichée.
2) Faire un "PostMessage(hWnd,WM_COMMAND,OUVRIR_DIALOGBOX,0);" toujours à la reception du WM_CREATE, puis traiter la commande "OUVRIR_DIALOGBOX" ... dans ce cas la dialog box s'ouvre correctement au dessus de la fenêtre principale, mais la fenêtre active est alors la fenêtre principale au lieu de la dialog box.
Comment faire pour avoir la dialog box active par dessus la fenêtre principale ?
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 5 déc. 2008 à 17:17
Salut
J'ai l'impression que tu as fait le plus dur. Tu développes en Win32, je suppose (je connais très mal, je fais plutot des MFC).
Je ne connais pas tes contraintes, mais a-tu tenter de mettre ta dialogbox en modal, en théorie ça doit la rendre active.
Sinon qu'appelles-tu active ? Elle a le focus ? ou elle se trouve au 1er plan ? ou encore les 2 en meme temps ?
genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008 5 déc. 2008 à 17:26
Oui, ma dialogbox est bien en modal (j'utilise DialogBoxParam).
Ce que j'appelle "active" est que le cadre de la fenêtre soit de couleur plus vive, et qu'elle ait le focus du clavier.
genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008 5 déc. 2008 à 18:13
Je viens d'essayer avec le ShowWindow(...) : les deux fenetres sont bien affichées, mais c'est la fenêtre principale qui est devant et qui est active, pas la dialogbox.
Vous n’avez pas trouvé la réponse que vous recherchez ?
genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008 5 déc. 2008 à 18:34
En effet, il doit y avoir un schmoll.
Je n'avais pas précisé que j'intercepte aussi le message WM_PAINT pour afficher quelque chose dans la zone client de la fenêtre principale. Et je me rends compte (grâce au message de BruNews, merci) que le problème ne se pose pas si je supprime la gestion du WM_PAINT.
Le problème n'est donc pas résolu ... mais il n'est peut-être pas là où je croyais.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 déc. 2008 à 22:40
Salut,
Tu peux aussi essayer d'intercepter le message WM_WINDOWPOSCHANGED dans la procédure de ta fenêtre mère. lParam pointera sur une structure WINDOWPOS dont le membre flags indique si la fenêtre vient d'être affichée. Pour cela, on applique un AND binaire (&) à ce membre avec SWP_SHOWWINDOW. Si le résultat est Vrai alors la fenêtre vient d'être affichée. A ce moment, on peut lancer la boite de dialogue fille. Pour s'assurer que la boite ne s'affiche qu'après la création de la fenêtre mère, on peut utiliser un flag qui sera positionné au premier affichage.
genetin
Messages postés9Date d'inscriptionjeudi 1 février 2007StatutMembreDernière intervention 6 décembre 2008 6 déc. 2008 à 16:35
J'ai finalement résolu le problème en empêchant que mon traitement du WM_PAINT ne modifie le focus : focus=GetFocus() en début de fonction, et SetFocus(focus) avant le return.
Merci à tous pour vos réponses qui m'ont été bien utiles.