Ouvrir une dialog box au démarrage

Résolu
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 6 décembre 2008 - 5 déc. 2008 à 17:09
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Derniè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 ?

Merci de votre aide.

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 déc. 2008 à 17:54
dans WM_CREATE:
- initialise ce qui convient.
- Fais un ShowWindow(...) pour forcer l'affichage.
- DialogBoxParam() maintenant.

ciao...
BruNews, MVP VC++
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
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 ?
0
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Derniè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.
0
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Derniè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.
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 déc. 2008 à 18:15
y a un schmoll dans ton code.

ciao...
BruNews, MVP VC++
0
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Derniè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.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Derniè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.
0
Rejoignez-nous