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

genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention - 5 déc. 2008 à 17:09 - Dernière réponse : genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 déc. 2008 à 17:54
3
Merci
dans WM_CREATE:
- initialise ce qui convient.
- Fais un ShowWindow(...) pour forcer l'affichage.
- DialogBoxParam() maintenant.

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de BruNews
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 5 déc. 2008 à 17:17
0
Merci
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 ?
Commenter la réponse de fregolo52
genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention - 5 déc. 2008 à 17:26
0
Merci
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.
Commenter la réponse de genetin
genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention - 5 déc. 2008 à 18:13
0
Merci
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.
Commenter la réponse de genetin
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 déc. 2008 à 18:15
0
Merci
y a un schmoll dans ton code.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention - 5 déc. 2008 à 18:34
0
Merci
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.
Commenter la réponse de genetin
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 5 déc. 2008 à 22:40
0
Merci
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.
Commenter la réponse de racpp
genetin 9 Messages postés jeudi 1 février 2007Date d'inscription 6 décembre 2008 Dernière intervention - 6 déc. 2008 à 16:35
0
Merci
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.
Commenter la réponse de genetin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.