Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
941 connectés 

  FORUM HardWare.fr
  Programmation

  [MFC] rendre une boite de dialogue invisible au lancement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] rendre une boite de dialogue invisible au lancement

n°60167
la viper
Posté le 18-09-2001 à 20:53:48  profilanswer
 

je voudrais rendre invisible (SW_HIDE) ma boite de dialogue à son lancement. Mais quand je met  
ShowWindow(SW_MINIMIZE) dans OnInitDialog ca fonctionne par contre ShowWindow(SW_HIDE) non :(
 
pkoi ??

mood
Publicité
Posté le 18-09-2001 à 20:53:48  profilanswer
 

n°60195
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-09-2001 à 22:16:44  profilanswer
 

suffit pas simplement de pas faire de ShowWindow ? :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°60204
la viper
Posté le 18-09-2001 à 22:54:28  profilanswer
 

non apparement il faut lancer la boite de dialogue en modeless (non modal) donc .. je viens de testé mais c'est pas concluant .. qq un pourrait-il me filer un bout de code ?

n°60210
la viper
Posté le 18-09-2001 à 23:17:07  profilanswer
 

pkoi ceci ne fonctionne pas ??
BOOL CTimeNetApp::InitInstance()
{
 AfxEnableControlContainer();
 
 // Standard initialization
 // If you are not using these features and wish to reduce the size
 //  of your final executable, you should remove from the following
 //  the specific initialization routines you do not need.
 
#ifdef _AFXDLL
 Enable3dControls();   // Call this when using MFC in a shared DLL
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
 
 CTimeNetDlg *pDlg;
 pDlg = new CTimeNetDlg();
 pDlg->Create(IDD_TIMENET_DIALOG, (CWnd*)this);
 pDlg->ShowWindow(SW_SHOW);
 
 return TRUE;
}

n°60212
la viper
Posté le 18-09-2001 à 23:17:38  profilanswer
 

mon appli se lance et se ferme tout de suite apres sans message d'erreur

n°60213
aqwsezsxdr
Posté le 18-09-2001 à 23:19:09  profilanswer
 

tu fais le ShowWindow au mauvais endroit
appele cette methode dans le OnInitDialog de la classe dialogue et ca ira mieux je pense.

n°60223
la viper
Posté le 19-09-2001 à 00:40:21  profilanswer
 

deja testé dans le OnInitDialog.
 
le SW_MINIMIZE fonctionne mais pas le SW_HIDE apparement c'est 'normal' et pour cacher une boite de dialogue a son lancement il faut la lancer en non-modal mais le code que j'utilise n'a pas l'air de fonctionner :( l'appli se lance et se ferme tout de suite apres.
par contre si tu as une methode en domodal ca m'interresse!

n°60272
H4dd3R
Q2
Posté le 19-09-2001 à 11:44:34  profilanswer
 

Je pense que c normal que ça marche pas en modal (même si j´ai tjrs essayé en non modal)..
 
Ben oui une modalbox hidden ça fait que l´utilisateur peut pas la fermer (plus de messages pour la fenêtre).. Et alors ton prog est coincé et sortira jamais du DoModal()..
 
Me trompe-je?? ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°60283
la viper
Posté le 19-09-2001 à 13:17:19  profilanswer
 

ba ouhai . c'est pour ca que ca fonctionne pas en domodal. Ca ne me derange pas de pas lancer ma boite en non modal .. le hic c'est que je code que j'applique n'est pas complet. Apparement, il faut que je rajoute kkchose dans la fonction create mais je c pas quoi.
donc en fait, maintenant je cherche de l'aide pour faire une  boite de dialogue en non modal :)

n°60296
H4dd3R
Q2
Posté le 19-09-2001 à 14:06:35  profilanswer
 

Est-ce que par hazard tu aurais utilisé le wizzard de création de dialog box app de visual??
 
Car dans ce cas c normal que ton app quitte de suite, elle sort de InitInstance() et détruit l´instance de ton dialogue..
 
En gros ton dialogue est fille d´une autre fenêtre ou tu as uniquement une fenêtre que tu veux câcher?? (en gros l´app invisible) ;)

mood
Publicité
Posté le 19-09-2001 à 14:06:35  profilanswer
 

n°60300
la viper
Posté le 19-09-2001 à 14:28:53  profilanswer
 

ah j'ai p'etre trouver la personne qui va me renseigner. bon alors j'ai effectivement crée un application mfc avec le wizard en selectionnant une simple boite de dialog comme projet.
Bon dans j'ai une classe derivée de Wnd et une classe derivée de DlgDialog.
 
la classe app lance ma boite de dialog en modal normalement et moi je voudrais la lancer en non-modal. Donc j'avais fait des modif
 
rajouté un create dans le InitInstance mais aussi forcer le InitInstance a renvoyer TRUE. Arrives tu as voir ce que j'essaye de dire ? apparement il faut que je rajoute des modifs dans le create de ma boite de dialog ..  
 
pourrais tu m'eclairer?

n°60310
H4dd3R
Q2
Posté le 19-09-2001 à 14:53:29  profilanswer
 

Oui c exactement ce que je voulais dire..
 
Si tu veux un exemple d´InitInstance() qui quitte pas tt de suite va voir le résultat du wizzard pour une app single document.. :)

n°60316
la viper
Posté le 19-09-2001 à 15:00:53  profilanswer
 

ok je regarde ca ce soir merci pour le coup de main.
 
tu as un exemple de code chez toi ??? ca pourrait m'interresser.

n°60323
H4dd3R
Q2
Posté le 19-09-2001 à 15:09:59  profilanswer
 

tu as un exemple de code chez toi ??? ca pourrait m'interresser.
Ben je sais pas tjrs exactement ce que tu veux faire..
Tu as une window mère (genre avec des menus et tout) et tu souhaite pouvoir rendre un dialogue fille parfois visible parfois invisible (auquel cas c tt simple), ou tu veux faire une app sans aucune fenêtre visible (auquel cas pquoi une fenêtre??)??.. :)

n°60330
la viper
Posté le 19-09-2001 à 15:19:04  profilanswer
 

oulla non.
 
en fait, j'ai ecris un compteur de tps passé sur internet. quand je minimise la boite de dialogue se met dans le systray. par contre elle se lance en mode SW_SHOW (je la vois) hors moi je voudrais juste la lancer au demarrage directement dans le systray sans voir la boite de dialogue d'ou l'utilité de lancer la boite de dialog en SW_HIDE.
 
mon projet se compose seulement du class app et d'une class dialog. L'app lance la dialog (logique) en mode modal. Et moi je voudrais modifier ce lancement pour que la boite de dialog soit en non modal et donc s'afficher directement dans le systray.
 
Arrive tu as me comprendre? ce qui n'est pas forcement evidement vu que je fais plusieurs chose en mm tps.
 
merci pour ton aide en tout cas.

n°60342
H4dd3R
Q2
Posté le 19-09-2001 à 15:36:31  profilanswer
 

Je comprends pas si qd tu la minimise elle va ds le systray un ShowWindow(SW_MINIMIZE) dans OnInitDialog() devrait suffire..
Et tu dis au début que ça marche..  :??:

n°60350
la viper
Posté le 19-09-2001 à 15:45:16  profilanswer
 

hum quand je dis systemtray je parle de l'endroit ou il y a l'heure et le HP de windows (en bas à droite).
j'ai un classe CDialog derivée qui fait ca.
donc tout fonctionne impec, sauf que je souhaiterais lancer mon appli directement dans le systray et non pas le lancer en SW_SHOW pour apres le minimiser manuellement par moi meme.
Pour cela, il ne me suffit juste que de rendre ma boite de dialogue en mode SW_HIDE et d'afficher l'icode dans le systray, ce qui est possible car j'ai une fonction qui me permet ca.
Le hic, c'est que pour rendre ma boite de dialogue invisible au demarrage, je suis obligé de la lancer en non modale.. d'ou le probleme que j'ai actuellement.
 
compris?

n°60380
H4dd3R
Q2
Posté le 19-09-2001 à 16:20:26  profilanswer
 

Je crois que cette fois ça y est!! ;)
 
ShowWindow(SW_MINIMIZE) dans OnInitDialog() ça a le défaut d´afficher ds le systray ET ds la barre des taches c ça??  :D  
 
Malheureusement je sais pas trop comment faire soi même le processing des messages..
Je viens d´essayer de bidouiller une app crée en single doc pour remplacer la fenêtre pricinpale par un CDialog ça marche mais pas moyen de détecter la fermeture du dialogue.. C certainement possible en programmant comme un porc (le dialogue qui envoie un message de fin de thread) mais si qqun avait une solution propre je suis curieux de savoir..


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°60386
la viper
Posté le 19-09-2001 à 16:29:00  profilanswer
 

bah apparement c simple et surtout connu .. enfin c ce qu'on m'a dit, je devrais avoir un bout de code demain. En fait l'astuce consiste à lancer la boite de dialogue en non modal et de surcharger la methode create de la boite de dialogue. j'en c pas plus !
 
attention, moi je ne pars pas d'un "single document" mais d'un "dialog based".. ce qui doit surement changer qq chose.
 
enfin des que j'ai la soluce, je l'affiche ici
 
merci encore. @+
 
bien entendu si tu as la soluce avant moi ...  :D

n°60504
Rebel
Posté le 19-09-2001 à 22:00:08  profilanswer
 

Ouais, parce que moi ça m'interesse aussi, j'ai tout ce qu'il faut, mais je suis confronté au même problème, et il me manque plus que ca pour finir mon appli !!!

n°60508
la viper
Posté le 19-09-2001 à 22:07:10  profilanswer
 

je m'approche du but .. voici le code .
 
BOOL CTimeNetApp::InitInstance()
{
 ......
 
 CTimeNetDlg *pDlg;
 pDlg = new CTimeNetDlg();
 pDlg->Create(IDD_TIMENET_DIALOG, (CWnd*)this);
 pDlg->ShowWindow(SW_HIDE);
 
 Sleep(10000); -> ici l'appli fonctionne pdt  10 secondes
 
 return TRUE; -> là l'appli quitte :(
}
 
il manque plus qu'à trouver comment ne pas quitter l'appli à la fin de InitInstance ..

n°60542
aqwsezsxdr
Posté le 20-09-2001 à 01:57:43  profilanswer
 

BOOL CTimeNetApp::InitInstance()  
{  
......  
 
CTimeNetDlg *pDlg;  
pDlg = new CTimeNetDlg();  
pDlg->Create(IDD_TIMENET_DIALOG, NULL); //fais gaffe, (CWnd *)this est une aberation, CWinApp ne derive pas de CWnd
pDlg->ShowWindow(SW_HIDE);  
 
Run(); //ca enclenche la pompe a message
 
return TRUE; -> là l'appli quitte    
}  
 
PS: le run est virtuel => si t'as besoin de tripatouiller c'est faissable. Pour la boite de dlg modale, j'ai regarde le code des MFC et effectivement billou y tiens à la visibilité de la boite de dialogue modale, il est donc bcp plus simple de contourner leur code que de vouloir ruser.

n°60545
la viper
Posté le 20-09-2001 à 07:32:11  profilanswer
 

merci pour ta reponse, malheureusement elle n'a pas l'air de fonctionner chez moi .. ou il manque encore qq chose car le resultat est le meme .. l'application quitte.
 
quel est le but de run() exactement ?
 
merci encore @+

n°60548
aqwsezsxdr
Posté le 20-09-2001 à 08:32:42  profilanswer
 

rajoute  m_pMainWnd = pDlg;  
avant l'appel à create
c'est Run, et cette methode + la doc tu la trouve dans la classe CWinApp.
Le Run a en gros ce code :
int CWinApp::Run()
{
 if (m_pMainWnd == NULL && AfxOleGetUserCtrl())
 {
  // Not launched /Embedding or /Automation, but has no main window!
  TRACE0("Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.\n" );
  AfxPostQuitMessage(0);
 }
 return CWinThread::Run();
}
 
et le CWinThread::Run, c'est a peu de choses pres une boucle infinie qui scrute l'ensemble des msg en povenance de win et les dispatche cf MSDN+code source

n°60562
la viper
Posté le 20-09-2001 à 10:07:32  profilanswer
 

merci pour l'aide :p  
je teste ça ce soir..

n°60574
H4dd3R
Q2
Posté le 20-09-2001 à 10:47:14  profilanswer
 

Merci aqwsezsxdr lancer le processing des messages c donc pas si dur!! :)

n°60782
la viper
Posté le 20-09-2001 à 20:43:20  profilanswer
 

solution finale :
 
BOOL CTimeNetApp::InitInstance()
{
 AfxEnableControlContainer();
 
 // Standard initialization
 // If you are not using these features and wish to reduce the size
 //  of your final executable, you should remove from the following
 //  the specific initialization routines you do not need.
 
#ifdef _AFXDLL
 Enable3dControls();   // Call this when using MFC in a shared DLL
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
 
 // Creation
 CTimeNetDlg *pDlg;
 pDlg = new CTimeNetDlg();
 m_pMainWnd = pDlg;
 int hWnd = pDlg->Create(IDD_TIMENET_DIALOG, NULL);
 pDlg->ShowWindow(SW_HIDE);
 pDlg->TrayShow();
 
 Run();
 
 // Destruction
 pDlg->TrayHide();
 delete pDlg;
 
 return TRUE;
}
 
ca marche  :pt1cable:  :pt1cable:  
 
merci à tous. En esperant que ca aidera d'autre personne   :jap:

n°60785
Rebel
Posté le 20-09-2001 à 21:15:41  profilanswer
 

Super, j'vais essayer !

n°60789
la viper
Posté le 20-09-2001 à 21:25:20  profilanswer
 

arggg !! apparement ... y'a un prob  :(  
 
quand je clique sur la X pour fermer mon appli .. elle disparait bien mais elle reste presente dans les process de windows, so .. fo trouver un moyen arreter l'appli maintenant  :crazy:

n°60791
la viper
Posté le 20-09-2001 à 21:30:18  profilanswer
 

il fo utiliser : DestroyWindow( );

n°61632
MiniCooler
Posté le 26-09-2001 à 11:53:33  profilanswer
 

a la place du run, essayes RunModalLoop (0)

 

[edtdd]--Message édité par MiniCooler--[/edtdd]


---------------
SetiCommander, le setiseur à la chaîne ...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [MFC] rendre une boite de dialogue invisible au lancement

 

Sujets relatifs
[ dll ] Afficher une boite de dialogue/message dans une dll ?JS [boite de dialogue]
[VISUAL BASIC] Une belle boite ouvrirconnaissez vous une boîte prête à payer pour ça ?
[LINUX] lancement d'un prog par lignede commande[VisualC] Comment intercepter la boite Win95/98 de login réseau...
créer un batch ki quitte au lancement d'une commande?? [ACCESS] Routine au lancement pour le changement de résolution
Plus de sujets relatifs à : [MFC] rendre une boite de dialogue invisible au lancement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR