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

  FORUM HardWare.fr
  Programmation
  C++

  [MFC VC++6]Mettre en barre de tache au démarrage...[résolu]

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[MFC VC++6]Mettre en barre de tache au démarrage...[résolu]

n°405441
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:22:22  profilanswer
 

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é :
 

Code :
  1. DWORD SystemStart = ::GetTickCount();
  2. if(SystemStart <= 2000000)
  3. {
  4. ShowWindow(SW_MINIMIZE);
  5. ShowWindow(SW_HIDE);
  6. OnSysCommand(SC_MINIMIZE,SC_HOTKEY);
  7. cpt_state=1;
  8. }
  9. else
  10. {
  11. ShowWindow(SW_SHOWNORMAL);
  12. }


 
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 ? :jap: Par avance, merci


Message édité par backdafuckup le 26-05-2003 à 10:28:53
mood
Publicité
Posté le 23-05-2003 à 09:22:22  profilanswer
 

n°405456
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:35:05  profilanswer
 

J'ai essayé la fonction CloseWindow() de la manière suivante :
 

Code :
  1. ::CloseWindow(GetSafeHwnd());


 
Mais ca n'a eu aucun effet...

n°405462
chrisbk
-
Posté le 23-05-2003 à 09:36:33  profilanswer
 

tu fais ton bazard a quel moment ? (dans le lancement du programme je cause)

n°405465
polo021
Posté le 23-05-2003 à 09:37:33  profilanswer
 

ha ouais bien vu, ca se peut que ca m.... si tu le fais rop tot, quand tout n'est pas encore construit.

n°405470
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:39:45  profilanswer
 

je le fait dans la fonction OnInitDialog(), il faut pas ? (et je le fait tout à la fin de cette fonction...)

n°405474
chrisbk
-
Posté le 23-05-2003 à 09:40:39  profilanswer
 

Space, normalement la fenetre est construite a ce moment la

n°405476
polo021
Posté le 23-05-2003 à 09:41:51  profilanswer
 

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

n°405478
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:42:23  profilanswer
 

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 ?

n°405479
chrisbk
-
Posté le 23-05-2003 à 09:42:47  profilanswer
 

polo021 a écrit :


t'es sur?
 
backda> t'as qu'a essayer ton code lorsque tu cliques sur un boutton


 
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 [:dawa]

n°405488
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:49:16  profilanswer
 

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....
 
http://banguy.free.fr/smileys/mort16.gif

mood
Publicité
Posté le 23-05-2003 à 09:49:16  profilanswer
 

n°405490
chrisbk
-
Posté le 23-05-2003 à 09:50:17  profilanswer
 

backdafuckup a écrit :

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....
 
http://banguy.free.fr/smileys/mort16.gif


 
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

n°405492
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 09:51:35  profilanswer
 

je vais fouiller dans ce sens, merci chris...

n°405523
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:06:05  profilanswer
 

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 :ouch: !

n°405532
polo021
Posté le 23-05-2003 à 10:09:36  profilanswer
 

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.

n°405586
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:37:22  profilanswer
 

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 ?

n°405588
polo021
Posté le 23-05-2003 à 10:40:21  profilanswer
 

backdafuckup a écrit :

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 ?


je n'ai rien truve non plus sur le fonctionnement du oninitdialog en preofrondeur  :pfff:  
 
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?

n°405589
polo021
Posté le 23-05-2003 à 10:41:09  profilanswer
 

Essaye un coup avec la fonction OnInitialUpdate de la View pour voir ce que ca donne.

n°405590
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:41:22  profilanswer
 

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....

n°405595
polo021
Posté le 23-05-2003 à 10:46:01  profilanswer
 

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.  :whistle:

n°405598
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:46:44  profilanswer
 

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.
 
Sinon, a la bourrin, un ptit timer qui apres X secondes minimize le pgm. Puis tu disables le timer.  :whistle:  


ben oui, mais je le placerais ou ce timer ???

n°405608
polo021
Posté le 23-05-2003 à 10:52:34  profilanswer
 

backdafuckup a écrit :


ben oui, mais je le placerais ou ce timer ???


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 :sweat:
 
EDIT : essaye aussi dans le InitInstance de ton CxxxApp


Message édité par polo021 le 23-05-2003 à 10:54:38
n°405612
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:54:58  profilanswer
 

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...

n°405620
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 10:59:51  profilanswer
 

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...

n°405716
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-05-2003 à 11:36:06  profilanswer
 

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.


---------------
J'ai un string dans l'array (Paris Hilton)
n°405721
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 11:39:30  profilanswer
 

J'ai remplacé mon code par ca :
 

Code :
  1. DWORD SystemStart = ::GetTickCount();
  2. if(SystemStart <= 1000000000000000000)
  3. {
  4. NOTIFYICONDATA nid;
  5. nid.cbSize = sizeof(NOTIFYICONDATA);
  6. nid.hWnd = GetSafeHwnd();
  7. nid.uID = 1;
  8. nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
  9. strcpy(nid.szTip,"Surveillance du CCD..." );
  10. nid.uCallbackMessage = WM_TRAYMESSAGE;
  11. nid.hIcon = (HICON) AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  12. Shell_NotifyIcon(NIM_ADD,(_NOTIFYICONDATAA *)&nid);
  13. ShowWindow(SW_HIDE);
  14. cpt_state=1;
  15. }
  16. else
  17. {
  18. ShowWindow(SW_SHOWNORMAL);
  19. }


 
 
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 !

n°405798
Konar
Posté le 23-05-2003 à 12:44:39  profilanswer
 

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 :
  1. case WM_SYSCOMMAND:
  2. {
  3. if (wParam == SC_MINIMIZE)
  4. {
  5.  AddTrayIcon();
  6.  ShowWindow(hWndDlg, SW_HIDE);
  7.  return TRUE; // TRUE pour faire disparaitre de la barre des taches
  8. }
  9. return FALSE;
  10. }


 
apres, les gens vont te dire l'equivalent en mfc...
 
edit : raté du return FALSE a la place du return TRUE


Message édité par Konar le 23-05-2003 à 13:18:34
n°405804
chrisbk
-
Posté le 23-05-2003 à 12:46:34  profilanswer
 

Konar a écrit :

si j'ai tout compris,  
apres, les gens vont te dire l'equivalent en mfc...


 
au pif : OnSysCommand ?  


Message édité par chrisbk le 23-05-2003 à 12:46:56
n°405823
Konar
Posté le 23-05-2003 à 12:58:55  profilanswer
 


 
oui, la fenetre est créée (le m_hWnd est valide) dès le InitDialog().

n°406188
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 15:34:47  profilanswer
 

Ceci était implémenté chez moi :
 

Code :
  1. void CPremiereAppliDlg::OnSysCommand(UINT nID, LPARAM lParam)
  2. {
  3.   if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  4.   {
  5. CAboutDlg dlgAbout;
  6. dlgAbout.DoModal();
  7.   }
  8.   else
  9.   {
  10. CDialog::OnSysCommand(nID, lParam);
  11.   }
  12. }


 
Je te remercie Konar (ca fait bizarre de dire ca :lol:), 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

n°406208
VisualC++
J'va y penser ...
Posté le 23-05-2003 à 15:41:26  profilanswer
 

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.

n°406210
VisualC++
J'va y penser ...
Posté le 23-05-2003 à 15:42:17  profilanswer
 

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.

n°406212
polo021
Posté le 23-05-2003 à 15:42:48  profilanswer
 

backdafuckup a écrit :

Ceci était implémenté chez moi :
 

Code :
  1. void CPremiereAppliDlg::OnSysCommand(UINT nID, LPARAM lParam)
  2. {
  3.   if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  4.   {
  5. CAboutDlg dlgAbout;
  6. dlgAbout.DoModal();
  7.   }
  8.   else
  9.   {
  10. CDialog::OnSysCommand(nID, lParam);
  11.   }
  12. }


 
Je te remercie Konar (ca fait bizarre de dire ca :lol:), 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


 
[mode bourrin on]
heuuu un OnMouseMouse sur la fenetre  :whistle:  
[mode bourrin off]

n°406215
VisualC++
J'va y penser ...
Posté le 23-05-2003 à 15:44:49  profilanswer
 

Erf mode tres bourin la :lol:

n°406218
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 15:46:24  profilanswer
 

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"... :D


Message édité par backdafuckup le 23-05-2003 à 15:46:45
n°406219
Konar
Posté le 23-05-2003 à 15:47:22  profilanswer
 

backdafuckup a écrit :


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


 
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...

n°406220
VisualC++
J'va y penser ...
Posté le 23-05-2003 à 15:48:07  profilanswer
 

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)

n°406226
Konar
Posté le 23-05-2003 à 15:52:38  profilanswer
 

backdafuckup a écrit :

Ceci était implémenté chez moi :
 

Code :
  1. void CPremiereAppliDlg::OnSysCommand(UINT nID, LPARAM lParam)
  2. {
  3.   if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  4. }




 
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


Message édité par Konar le 23-05-2003 à 15:53:27
n°406229
VisualC++
J'va y penser ...
Posté le 23-05-2003 à 15:53:48  profilanswer
 

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)


Message édité par VisualC++ le 23-05-2003 à 15:54:08
n°406232
backdafuck​up
Back to da old skool
Posté le 23-05-2003 à 15:55:38  profilanswer
 

Code :
  1. CDialog::OnInitDialog();


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é[:spamafote])
 
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...

n°406233
Konar
Posté le 23-05-2003 à 15:55:41  profilanswer
 

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
 
(enfin c un peu merdique)


 
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.
"

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [MFC VC++6]Mettre en barre de tache au démarrage...[résolu]

 

Sujets relatifs
transformer un dword(32bits) en 2 word(16bits) [résolu]Coloration personaliser de ligne de DATAGRID ?? Résolu
[RESOLU] pb de types - debutant[Resolu] Ecrire dans la base de registre/conversion
[VB.net] une fonction pour terminer le programme [resolu]Comment faire pour mettre une barre d'avancement...
Requete SQL sous SQLserver : ca marche pas ... RESOLU !!!![RESOLU] [ACCESS] Créer des réferences simplifié a partir d'une table
prob entre VB 6 et Access 2000...! **[Résolu]** 
Plus de sujets relatifs à : [MFC VC++6]Mettre en barre de tache au démarrage...[résolu]


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