Mettre en barre de tache au démarrage...[résolu] [MFC VC++6] - C++ - Programmation
Marsh Posté le 23-05-2003 à 09:35:05
J'ai essayé la fonction CloseWindow() de la manière suivante :
Code :
|
Mais ca n'a eu aucun effet...
Marsh Posté le 23-05-2003 à 09:36:33
tu fais ton bazard a quel moment ? (dans le lancement du programme je cause)
Marsh Posté le 23-05-2003 à 09:37:33
ha ouais bien vu, ca se peut que ca m.... si tu le fais rop tot, quand tout n'est pas encore construit.
Marsh Posté le 23-05-2003 à 09:39:45
je le fait dans la fonction OnInitDialog(), il faut pas ? (et je le fait tout à la fin de cette fonction...)
Marsh Posté le 23-05-2003 à 09:40:39
Space, normalement la fenetre est construite a ce moment la
Marsh Posté le 23-05-2003 à 09:41:51
chrisbk a écrit : Space, normalement la fenetre est construite a ce moment la |
t'es sur?
backda> t'as qu'a essayer ton code lorsque tu cliques sur un boutton
Marsh Posté le 23-05-2003 à 09:42:23
c'est pour ca que je comprends pas...
J'ai mis des msgbox dans OnSize, pour voir si c'était pas ca qui foirait tout, mais non...
Dans le code que j'ai mis plus haut, j'avais integré une messagebox pour savoir si je rentrais dans le if. Au démarrage, la messagebox apparaissait en continu (tu appuies sur OK et elle réapparait quoi)... ca vient d'ou ?
Marsh Posté le 23-05-2003 à 09:42:47
polo021 a écrit : |
98% (sinon ton idee de test est pas con)
j'avais deja fait ce genre de blague (minimiser au demarrage) mais je sais pu comment et le code est chez moi
Marsh Posté le 23-05-2003 à 09:49:16
J'ai fait le test de polo...
Vous avez une corde ?
Je le place sur un bouton (le meme code, exactement)
Et la ca marche. La fenetre se minimise, disparait pour laisser la place au trayicon....
Marsh Posté le 23-05-2003 à 09:50:17
backdafuckup a écrit : J'ai fait le test de polo... |
ben tu sais pas ce qu'il se passe apres le Oninit aussi, ca se trouve y'a un appel pour montrer la fenetre etc etc
fo que tu approfondisse les messages envoyees lors de la creation d'une fenetre
Marsh Posté le 23-05-2003 à 10:06:05
Est ce que les fonctions que j'ai montrées plus haut sont automatiquement appliquées à ma Dialog ? ou faut il spécifier ?
A mon avis c'est automatique, étant donné que ca fait tout buguer : avec ce qui est la haut, l'icone tray apparait, mais l'icone de la barre des taches clignote !
Marsh Posté le 23-05-2003 à 10:09:36
le OnInitDialog est appele lors du DoModal mais pour ma part je pense que la fenetre n'apparait que lorsqu'on sort du OnInitDialog. Enfin j'en sais trop rien. Je vais aller tenter de me renseigner la dessus, j'ai pas grand chose d'autre a faire la.
Marsh Posté le 23-05-2003 à 10:37:22
Je ne trouve rien de mon coté...
Je ne comprends pas...
Est ce que ca peut marcher si le OnInitDialog appelle une fonction (à la fin du OnInitDialog biens sur) qui elle ferait minimiser la fenetre ?
Ou alors y a t'il un moyen de faire executer une fonction juste après le OnInitDialog ?
Marsh Posté le 23-05-2003 à 10:40:21
backdafuckup a écrit : Je ne trouve rien de mon coté... |
je n'ai rien truve non plus sur le fonctionnement du oninitdialog en preofrondeur
Pour la fonction que tu vx appeler a la fin du oninitdialog, ca ne va strictement rien changer a mon avis.
Ce que tu vx faire en fait c'est minimiser des que le pgm est lance?
Marsh Posté le 23-05-2003 à 10:41:09
Essaye un coup avec la fonction OnInitialUpdate de la View pour voir ce que ca donne.
Marsh Posté le 23-05-2003 à 10:41:22
Voila, tout à fait.En fait, je veux qu'il démarre en meme temps que windows (ca c'est dans le regedit, c'est fait), mais qu'il ne s'affiche pas à l'écran, je veux juste qu'il y ait son trayicon....
Marsh Posté le 23-05-2003 à 10:46:01
tu pourrais surement trouver ca dans les sources qu'il y a sur le site que je t'avais file ce matin.
Sinon, a la bourrin, un ptit timer qui apres X secondes minimize le pgm. Puis tu disables le timer.
Marsh Posté le 23-05-2003 à 10:46:44
polo021 a écrit : tu pourrais surement trouver ca dans les sources qu'il y a sur le site que je t'avais file ce matin. |
ben oui, mais je le placerais ou ce timer ???
Marsh Posté le 23-05-2003 à 10:52:34
backdafuckup a écrit : |
tu t'en fous de ou tu le place le timer mais c'est quand meme pas tres propre et tres laid de faire ca.
Essaye d'abord de tapper ton code de minimisation soit dans le Oninitialupdate de la vue, soit dans le OnCreate du CMainframe. Mais je doute du resultat
EDIT : essaye aussi dans le InitInstance de ton CxxxApp
Marsh Posté le 23-05-2003 à 10:54:58
Je n'ai aucune de ces trois fonctions...
C'est une appli dialog based, et je crois pas que ce soit pareil qu'une appli sdi...
Marsh Posté le 23-05-2003 à 10:59:51
C'est impensable, j'ai un bouquin énorme de MFC professional edition par un mec avec un nom pas d'ici qui apparemment est un pro, et il est meme pas capable de m'expliquer OnInitDialog, à part me dire que c'est la fonction appelée au démarrage de l'application dans mon cas...
Marsh Posté le 23-05-2003 à 11:36:06
OnInitDialog est la fonction qui est appelée avant la création de la boite de dialogue.
Donc si tu veux que ton programme soit dans le TrayIcon, tu créé ladite TrayIcon dans cette fonction, et juste après tu y colles un ShowWindow(SW_HIDE).
Ca fonctionne très bien, j'ai déjà employé cette méthode un paquet de fois.
Marsh Posté le 23-05-2003 à 11:39:30
J'ai remplacé mon code par ca :
Code :
|
Mais ca ne marche toujours pas !!!
L'icone est créée, mais la dialog reste affichée en premier plan !!! or moi je veux qu'elle ne soit qu'en trayicon, et pas en barre des taches !
Marsh Posté le 23-05-2003 à 12:44:39
si j'ai tout compris, faut qu'elle disparaisse de la barre des taches ?
en mfc je sais pas, mais en win32 faut handler WM_SYSCOMMAND, et si le wParam == SC_MINIMIZE, faut retourner TRUE pour faire disparaitre l'appli de la barre des taches.
le code :
Code :
|
apres, les gens vont te dire l'equivalent en mfc...
edit : raté du return FALSE a la place du return TRUE
Marsh Posté le 23-05-2003 à 12:46:34
Konar a écrit : si j'ai tout compris, |
au pif : OnSysCommand ?
Marsh Posté le 23-05-2003 à 12:58:55
ReplyMarsh Posté le 23-05-2003 à 15:34:47
Ceci était implémenté chez moi :
Code :
|
Je te remercie Konar (ca fait bizarre de dire ca ), mais mon but est que la fenetre se minimise dès le démarrage de windows, donc de l'application
En fait il faudrait qu'elle se minimise pendant la fonction mfc 'OnInitDialog'. Mais apparement, ca ne peut pas marcher.
Il me faut donc trouver une solution pour qu'une fonction se lance dès la fin de OnInitDialog
Marsh Posté le 23-05-2003 à 15:41:26
Lu Back, euh la peut pas recup du code sur mon poste, mais quand je rentre je te poste un morceau de code car c possible de le faire (que ce soit dlg ou xDi based) des le demarrage de l'appli.
Marsh Posté le 23-05-2003 à 15:42:17
Par contre gaffe au code ds le SysCommand, testé avant tt chose si les fenetre son valide car c appele 2 ou 3 fois avant que reelement la dlg soit visible.
Marsh Posté le 23-05-2003 à 15:42:48
backdafuckup a écrit : Ceci était implémenté chez moi :
|
[mode bourrin on]
heuuu un OnMouseMouse sur la fenetre
[mode bourrin off]
Marsh Posté le 23-05-2003 à 15:46:24
merci visual c'est cool à toi..
J'ai pas compris l'histoire de OnSysCommand
De toute facon, je n'ai pas besoin de l'utiliser ca moi ? si ?
edit: ca se dit pas d'ailleurs "c'est cool à toi"...
Marsh Posté le 23-05-2003 à 15:47:22
backdafuckup a écrit : |
OnInitDialog() est appelée pendant le TaFenetre.Create().
qq trucs :
- dans ton OnInitDialog(), est ce que tu appelles le OnInitDialog() de ta classe parent ?
- quelle est ta valeur de retour de ton OnInitDialog() (c'est important) ?
- tu fais des trucs apres le .Create() ? (genre des ShowWindow ou autres)
pasque bon, cacher la fenetre dès le lancement de l'appli c'est forcement possible...
Marsh Posté le 23-05-2003 à 15:48:07
Non je dis juste car il me semble que qqun parlais de mettre du code ds le OnSysCommand, que les messages sont envoyes avant mm que les fenetres soient reelement visible donc de tester si tu devrait mettre du code ds cette fonction avant tt chose que ta fenetre est visible (enfin visible ou pas mais affichee et existante pour pas faire crash)
Marsh Posté le 23-05-2003 à 15:52:38
backdafuckup a écrit : Ceci était implémenté chez moi :
|
euh, y a pas un pb sur le nID ? chez moi ca dit ca :
"Specifies the type of system command requested. This parameter can be any one of the following values: ...plein de SC_*** dont le SC_MINIMIZE"
donc je vois pas le rapport avec IDM_ABOUTBOX
Marsh Posté le 23-05-2003 à 15:53:48
Non non c bon pour le About, c que les 24 premiers bits correspondent au IDM c une astuces avec la numerotation
(enfin c un peu merdique)
Marsh Posté le 23-05-2003 à 15:55:38
Code :
|
Je suppose que ceci est l'appel au oninitdialog du parent..
Mon OnInitDialog retourne TRUE (en majuscules, j'insiste.. J'ai essayé de mettre false, sachant que cette valeur était en rapport avec une histoire de focus sur un controle, mais ca n'a rien changé)
j'ai pas de .Create() donc je ne sais pas ce que tu entends par la...
Pour ce qui est de la fonction OnSysCommand, elle a été générée par Visual C++ 6, et ce IDM_ABOUTBOX est pour l'appel (menu système de la fenetre) à la boite de dialogue "a propos", c'est tout...
Marsh Posté le 23-05-2003 à 15:55:41
VisualC++ a écrit : Non non c bon pour le About, c que les 24 premiers bits correspondent au IDM c une astuces avec la numerotation |
autant pour moi, j'avais pas lu les man jusqu'au bout :
"
In WM_SYSCOMMAND messages, the four low-order bits of the nID parameter are used internally by Windows. When an application tests the value of nID, it must combine the value 0xFFF0 with the nID value by using the bitwise-AND operator to obtain the correct result.
"
Marsh Posté le 23-05-2003 à 09:22:22
Mon application MFC se lance en meme temps que windows (au démarrage donc)...
Je voudrais qu'au moment ou elle se lance, elle soit minimisée.
Cette minimisation est controlée par la fonction OnResize qui, si la fenetre est minimisée, la fait disparaitre de la barre des taches (ShowWindow(SW_HIDE)) et affiche une trayicon.
Le problème est que je n'arrive pas à minimiser cette dialog depuis mon programme. Voici le code que j'ai essayé :
J'avais essayé juste avec ShowWindow(SW_MINIMIZE) mais ca n'avait aucun effet. En rajoutant ShowWindow(SW_HIDE), la fenetre se mettait en arriere plan, et le trayicon apparaissait (mais la fenetre était toujours en barre des taches ).
J'ai rajouté OnSysCommand(SC_MINIMIZE,SC_HOTKEY), et maintenant, l'application plante : Elle démarre, puis s'arrete aussitot...
Vous auriez des suggestions ? Par avance, merci
Message édité par backdafuckup le 26-05-2003 à 10:28:53