Ouvrir une dialog box au démarrage [Résolu]

Signaler
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008
-
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008
-
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

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

ciao...
BruNews, MVP VC++
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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 ?
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008

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.
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
y a un schmoll dans ton code.

ciao...
BruNews, MVP VC++
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008

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.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
9
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
6 décembre 2008

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.