begin process at 2012 05 27 19:34:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > WIN32 - MFC - VC6 - PLACE D'UNE APPLI : BARRE DES TACHES OU SYSTRAY (HEURE) ICONE AVEC MENU ET ACTION

WIN32 - MFC - VC6 - PLACE D'UNE APPLI : BARRE DES TACHES OU SYSTRAY (HEURE) ICONE AVEC MENU ET ACTION


 Information sur la source

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Initié Date de création :21/02/2005 Date de mise à jour :05/04/2005 08:42:45 Vu / téléchargé :10 515 / 1 021

Auteur : magic_Nono

Ecrire un message privé
Site perso
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici une classe qui permet de faire apparaitre simplement  votre application dans la systray (à coté de l'heure) et / ou dans la barre des taches (entre l'heure et le bouton démarrer)

Dans la systray, à l'icone est associé une bulle d'aide, des actions et un menu

les actions sont :
au double clic gauche: affichage au premier plan de l'appli
au clic droit : l'apparition du menu

Cette classe permet en outre de réduire l'appli uniquement dans la systray


procédure pour l'utiliser:

1>inclure les fichiers BSystray.cpp & hpp à votre projet
et en particulier dans votre fenetre principale

2> Dans votre fenetre principale
definir un pointeur sur un BSystray
ne l'instancier qu'une fois que la fenetre est effectivement créée (dans le OnInitDialog par exemple)
et ne pas oublier de le détruire dans le destructeur ...

ex:
m_pSysTray=new BSystray (m_hWnd,IDI_TRAY,IDM_MENU_SYSTRAY,m_hIconSystray,_ T("Salut !!!"));

parametre :
/// -----  HWND hWnd : fenêtre associée à l'icone
/// -----  const unsigned int uIconID : id de l'icone
/// -----  const unsigned int idMenu : id du menu
/// -----  HICON hIcon : handle sur l'icone pour éviter des effets de bord d'affichage
/// -----  LPCSTR lpToolTip : texte bulle a afficher sur l'icone

3> récupérez et transmettez les évenements WM_B_CREATION_ICONE_SYSTRAY & WM_B_NOTIFICATON_ICONE_SYSTRAY

dans la MessageMap : rajouter
ON_REGISTERED_MESSAGE(WM_B_CREATION_ICON E_SYSTRAY, OnTaskBarCreated)
ON_REGISTERED_MESSAGE(WM_B_NOTI FICATON_ICONE_SYSTRAY, OnNotifyIcon)

4> déclarer et définissez les fonctions associées:
LRESULT CPlaceAppliDlg::OnTaskBarCreated(WPARAM wParam, LPARAM lParam)
{
    return (m_pSysTray->OnTaskBarCreated(wParam, lParam) );
}
void CPlaceAppliDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
m_pSysTray->OnNotifyIcon(wParam, lParam);
}

5> c'est fini, appelez m_pSysTray->addIcone()
éventuellement après la construction de m_pSysTray ou à tout autre endroit.



bonus : si vous souhaitez réduire l'appli uniquement dans la systray, il faut modifier une fonction préhexistante de votre classe : OnSysCommand

et la rendre similaire à la suivante:

void CPlaceAppliDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
Upda teData(true);
switch(nID)
{
case SC_MINIMIZE:
if(m_bTraySeul) //condition optionnelement si vous souhaitez laisser les deux modes...
{
//forcer l'affichage de l'icone
if(!m_pSysTray->isPresent())
{
m_pSysTray->addIcone();
m_bTray=true;
UpdateData(false);
}
ShowWindow(SW_HIDE);
break;
}
default:
CDialog::OnSysComman d(nID, lParam);
}
}
}






j'espere que cette classe pourra vous etre utile
et n'hésitez pas à critiquer, proposer, suggérer, améliorer...
Magicalement.
Nono.


 Conclusion

MaJ : intégration du bouton bistable afficher/masquer appli ds "Barre des taches"

grace à un source de BruNews (merci à toi)

1> l'implémentation du bouton bistable "Barre des taches"
permettant d'afficher/masquer l'appli dans la barre des taches. alors qu'elle est affichée.


reste à faire

1> idem pour la section gestionnaire des taches (CTRL ALT SUPPR)
2> idem pour la section Zappage (Alt Tab)

Au Passage, merci à Vic pour l'idée de départ....

et n'hesitez pas à contribuer aux deux developpement cités ci dessus
merci

++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

21 février 2005 16:12:33 :
l'implémentation du bouton bistable "Barre des taches" permettant d'afficher/masquer l'appli dans la barre des taches. alors qu'elle est affichée merci à BruNews pour son source : http://www.cppfrance.com/code.aspx?id=21205
05 avril 2005 08:42:45 :
les Bxxx ne sont pas utilisées pour ce projet: 3 ou 4 fonctions d'affichage de boite de dialogue BVisuel::informe ou BVisuel::alerte ont directement été transformé en AfxMessageBox (Nota: ceux qui préfèrent Win32 n'ont qu'à les remplacé par des MessageBox ) (Nota2: les erreurs ne sont plus détaillée: expliciteLastError n'est pas appelée cette fonction donne l'explication de la derniere erreur levée (GetLastError) )

 Sources du même auteur

Source avec Zip [MFC] BCOMBOBOX & BLISTBOX
Source avec Zip Source avec une capture [ C++ WIN32 ] REMPLISSAGE DE FICHE - FENETRE DYNAMIQUE
Source avec Zip [WIN32] [VC6] BOITE À CHOIX MULTIPLE PAR BOUTONS
Source avec Zip TEMPLATE DE DIALOG/FENETRE (VC++)
Source avec Zip ACCES FTP

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

Commentaires et avis

Commentaire de jprozorback le 23/02/2005 12:50:42

encore des MFC....

Commentaire de magic_Nono le 23/02/2005 13:33:44

assez facilement supprimables

a toi de faire la translation et publie la en mettant un lien ici...

mais respecte la POO et le systeme des classes,
c'est indispensable pour les gros projets bien gérés

++
Nono

Commentaire de jprozorback le 23/02/2005 15:47:51

je respecte la POO et le systeme de classes tout comme toi seulment je pense pas que gros projet rime avec  pas avec MFC,je pense que beaucoup sont de mon avis. les MFC ne sont pas indispensable elle sont juste une simplification du win32.
le WIN32 permet un meilleur control de chaque composant mais plus long a coder.

c'est parcequ'il est plus long a coder qu'il est plus riche
et plus complet.

voila , sinon je respecte totalement ton projet c'est que ca fait plusieur fois que je regarde tes sources et ya tj des MFC.

je pense que les MFC ont fait leurs TMP. regarde du coté de MS la part qui leurs consacre. doit y avoir 15 à 20 page seulment.


Commentaire de darkkinj le 13/03/2005 17:52:45

Bravo pour cette source. Je cherchait justement depuis un bon moment un code pour expliquer comment faire ça en mfc.

C'est bien justement que quelqu'un les utilise aussi. Je sais que certains préfèrent la programmation directe de l'API mais je n'ai ni le temps de m'y mettre ni le courage, j'utilise les MFC juste pour construire les interfaces graphiques pour gagner du temps même si elle seront toujours moins belle que ce que certains sont capables de faire.

@+
darkkinj

Commentaire de magic_Nono le 14/03/2005 08:57:08

merci pour ton com darkkinj

effectivement, jprozorback, utiliser les mfc permet vraiement de gagner du temps dans un contexte de rendement important...

Magicalement.
Bruno.

Commentaire de PupetMaster le 03/04/2005 23:18:34

salut,

Cela fait une bonne semaine que j'essaye de mettre mon application en systray mais faut croire que j'ai pas le niveau :D

Je voulais essayé inclure tes class a mon projet mais j'ai un problème ... il me manque apparement des class ...



Ca c'est lorsque j'essaye de compiler ta source sans aucune modification.

-------------------Configuration: placeAppli - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
BSystray.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\Dlg\BSystray.cpp': No such file or directory
placeAppli.cpp
c:\documents and settings\david\bureau\systrayt class\placeappli\placeapplidlg.h(17) : fatal error C1083: Cannot open include file: '../Bibli/Dlg/BSystray.hpp': No such file or directory
placeAppliDlg.cpp
c:\documents and settings\david\bureau\systrayt class\placeappli\placeapplidlg.h(17) : fatal error C1083: Cannot open include file: '../Bibli/Dlg/BSystray.hpp': No such file or directory
BFichier.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\BFichier.cpp': No such file or directory
BMsgBoxChoix.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\Dlg\BMsgBoxChoix.cpp': No such file or directory
BString.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\BString.cpp': No such file or directory
BVisuel.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\BVisuel.cpp': No such file or directory
Globals.cpp
fatal error C1083: Cannot open source file: 'C:\Documents and Settings\David\Bureau\systrayt class\Bibli\Globals.cpp': No such file or directory
Generating Code...
Error executing cl.exe.
Creating browse info file...
BSCMAKE: error BK1506 : cannot open file '.\Debug\BSystray.sbr': No such file or directory
Error executing bscmake.exe.

placeAppli.exe - 9 error(s), 0 warning(s)


Vala en fait il manque des fichiers :s

Pourrais-tu m'aider?

Merci

Commentaire de magic_Nono le 05/04/2005 08:25:00

effectivt, la premiere version était sans utiliser les Bxxx
(un ensemble de Bibliothèque)

et lorsque j'ai fait l'update, je n'avais que changer les fichiers modifiés...

nota: tu aurai pu trouver les Bxxx sur mes autres sources

Je fais le correctif pour rétablir une version sans Bxx et reposte...

dslé
++
Nono

Commentaire de PupetMaster le 06/04/2005 01:17:36

Tout est nickel ;)

Merci


PS: c'est quoi ces bibliothèque Bxxx ?  Qu'est ce qu'elles font, qui les ont développées? etc

Commentaire de magic_Nono le 06/04/2005 08:37:52

Merci puppet

Pour répondre à ta question,
Les Bxxx sont un ensemble de fonctionnalités/classes usuelles que des amis et moi meme avons développées au cours du temps, j'en suis personnellement l'auteur de la majorité.

Le but étant à la base une mise en pratique des différents apprentissages, une totale maitrise des différents traitements et il a fréquemment été demandé de ne pas utilisé de bibliothèque externe. (TP, mini proj ou demandes d'entreprises)

Cet ensemble de fonctions usuelles a été utilisé pour beaucoup de projets et continue à évoluer...
Il facilite la programmation et est basé sur les principes de la POO.

Les Bxxx comportent principalement un ensemble de classes commençant par un B comme Bilbliothèque, d'ou leur nom.
Elles permettent d'utiliser des fonctionnalité sans se soucier de l'environnement de développement puisque sa majeur partie fonctionne sous unix, beos et windows.
Elles comportent également un ensemble de fonctionnalité graphique utilisant les mfc.

Tu peux, si tu le désires, en trouver une partie publiée au travers de ces pages.
et toute contribution et/ou amélioration y est la bienvenue.

Ces bibliothèques sont open source et libres (ou licence Card-Ware).
Il est cependant demandé de faire profiter des améliorations et correctifs les autres utilisateurs.
comme c'est le principe pour tout code libre.


Magicalement
Bruno.

Commentaire de magic_Nono le 20/03/2006 14:26:23

très prochainement sur cette source :
intégration & execution d'un exe en mode noyeau à la fin de l'exe
(exe de BruNews) permettant de cacher le processus de la liste des processus actif.

++
B

Commentaire de krust le 26/03/2006 18:36:35

Je vois pas l'intéret d'une hook du service table dans cette source...

Commentaire de magic_Nono le 26/03/2006 21:31:58

cette source traite des endroits ou l'on peut faire apparaitre une application (en compilation utilistateur)

Commentaire de tularis le 12/10/2006 12:12:46

merci nono , tu ma deg de la prog je voi ton prog rien que pour le comprendre sa me prendrai des jour et des plein de tuto a lire ... di moi au moin que tu sort d'une ecole d'ingé ou que t'es un otiste de la prog ...
Bref ca commence a me gaver la prog jai 5 project a faire pour la fin de lannee je crois que je vais rendre des ptite merde sous forme de console et puis changer de voix ...

Commentaire de tularis le 12/10/2006 12:25:05

si je pense aussi que tu devrai aprendre a reroganiser ton code, ... et puis ya des commentaire qui serve à rien ...
(cf:/// --------------------------------------------------------------
/// ---------------- BSystray::addIcone() -> bool ----------------
/// --------------------------------------------------------------
/// -----  Objectif : ajoute l'icone à la systray
/// -----  Auteur(s) : Bruno CELLE 19/02/05
/// -----  PreCond : /
/// -----  PostCond : /
/// -----  Etat : 2 (-1<0<1<2)
/// --------------------------------------------------------------
/// -----  retour (bool) : cf.objectif
/// --------------------------------------------------------------
/// -----  Var Utilisées de la classe (5) : m_bPresent ,m_hIcon ,m_hWnd ,m_lpToolTip ,m_uIconID
/// -----  Var Internes à la fonction (3) : DestroyIcon ,res ,tnid
/// -----  Var Utilisées par adresse (1) : tnid
/// -----  Var In  (4) : m_hIcon ,m_hWnd ,m_lpToolTip ,m_uIconID
/// -----  Var In  Globales Constantes (6) : NIF_ICON ,NIF_MESSAGE ,NIF_TIP ,NIM_ADD ,NOTIFYICONDATA ,WM_B_NOTIFICATON_ICONE_SYSTRAY
/// -----  Var In-Out (1) : m_bPresent)
tu met tes fonction en debut de prog ou dans un seul autre fichier que t'include , sois c'est incomprehensible pour tous sois je suis une bille sois on est tous des bille ...
jretourne a mes tutos ...

Commentaire de tularis le 12/10/2006 12:42:49

bon beh jvien de trouver d'autre source, c'es sque je pensais tu sais pas coder et tu sais pas commenter c'est pas de la mechanceté, ... mais tu ferais bien de revoir ta façon de commenter et de coder, car si un jour quelqu'un veux reprendre ton prog, il va mettre autant de temps le reorganiser que toi a le coder
et si le mec est comme moi n'a pas toute les notion que tu possede il va se perdre dans ton prog, bref organise sil te plai ...

Commentaire de magic_Nono le 13/10/2006 10:49:36

Bonjour Tularis

Tout d'abord, merci pour ces commentaires.
Qui ont l’avantage d'être présent, mais méritent un droit de réponse

0> ce n'est pas le but de te dégoûter de la prog, dis ce que tu ne comprends pas.
1> oui je sors d'une école d'ingé en info
2> réorganiser ce code,
oui, pourquoi pas, propose...

"tu met tes fonction en début de prog ou dans un seul autre fichier que t'include"

C'est le cas : BSystray.cpp & BSystray.hpp qui contiennent la classe BSystray
décrite ici,
le reste n'est qu'un exemple d'application, généré par Visual, adapté succinctement ensuite
afin d’obtenir les fonctionnalités désirées.

3> concernant ces 'attaques personnelles, je pense savoir coder, même si j'apprend toujours.

4> pour les commentaires, ils sont générés automatiquement par un programme : MétaProg,
la 3e section de commentaire de fonction :
/// -----  Var Utilisées de la classe (5) : m_bPresent ,m_hIcon ,m_hWnd ,m_lpToolTip ,m_uIconID
/// -----  Var Internes à la fonction (3) : DestroyIcon ,res ,tnid
/// -----  Var Utilisées par adresse (1) : tnid
/// -----  Var In  (4) : m_hIcon ,m_hWnd ,m_lpToolTip ,m_uIconID
/// -----  Var In  Globales Constantes (6) : NIF_ICON ,NIF_MESSAGE ,NIF_TIP ,NIM_ADD ,NOTIFYICONDATA ,WM_B_NOTIFICATON_ICONE_SYSTRAY
/// -----  Var In-Out (1) : m_bPresent)

Cette section est totalement optionnelle, d'ailleurs, actuellement, je ne la mets plus dans les codes, (il est vrai qu'elle peut perturber ta lecture)
Je ne la fais maintenant apparaître que durant l'analyse & le développement,
puis la fait disparaître (en 1 clic) ensuite, grâce à MétaProg.

Concernant le reste des commentaires, je pense savoir faire, néanmoins suis ouvert à toute proposition d'amélioration;

En reprenant cette source, les détails ne sont quasi pas commentée, (il y a les MSDN pour ça, par exemple)
Seules les fonctions sont décrites: précond/postCond & variable in&out.

Ce qui est le plus important dans le but d’une réutilisation.

Par ailleurs, je respecte les principes de la POO, et encapsule le code Win32 et autre dans des classes qui ont une unité logique.

Donc selon moi, ce code est organisé.

Mais il est possible que tu ai en fait, ici fait le procès du code d'exemple qui est effectivement MFC et qui a été créé rapidement avec le Wizard de Visual dont tu n'as a priori pas l'habitude.

J’attends impatiemment que tu publies des choses afin de voir ce qui selon toi serait de la "bonne programmation".

Magicalement, et sans animosité aucune
Nono.

PS : pense à soigner ton orthographe

Commentaire de tularis le 14/10/2006 14:03:11

dissoulé pour l'othographe ...
sinon je suis perfectioniste je ne pense que je pubirai quelque chose avant que cela soit proche de "ma perfection"  et ce n'est pas sur que je l'ateigne un jour ...
De plus je ne pense pas avoir autant de passion que toi dans l'informatique ... j'ai vraiment eu du mal a comprendre ta facon de coder et ton organisation et des petite chose comme les commentaire de 10 ligne m'on vraiment troublé, alor que je trouve que plein de petit commentaire simple manque comme celle pour des variables
ou des dixaine de ligne de code comme celle ci "tnid.hWnd=m_hWnd;"
pourrai tu reelement comprendre ton prog dans 6 mois sans probleme ou meme le montrer à de tes amis programeur j'en doute ...
PS:(msdn represente "mes tutos" ...)

Commentaire de unionx le 19/10/2007 12:08:54

bonjour
je veux savoir ou je vais trouver la fonction
::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
j'ai bien chercher dans la partie ClassWizard et events mais je la trouve pas.

merci avance pour l'aide.

Commentaire de magic_Nono le 22/10/2007 17:00:46

Bonjour,

Effectivement, je ne la trouve pas non plus dans la version en ligne des msdn.

En fait, dans l'exemple de ce code elle est construite sur l'exemple des OnNotify

CWnd::OnNotify

The framework calls this member function to inform the parent window of a control that an event has occurred in the control or that the control requires some kind of information.

virtual BOOL OnNotify(
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult
);


Dans notre exemple, dans la classe, voici sa description:

/// --------------------------------------------------------------------------------------
/// ---------------- BSystray::OnNotifyIcon(WPARAM wParam ,LPARAM lParam) ----------------
/// --------------------------------------------------------------------------------------
/// -----  Objectif : réponse sur action ou autre sur l'icone
/// -----  PreCond : /
/// -----  PostCond : /
/// -----  Etat : 2 (-1<0<1<2)
/// --------------------------------------------------------------------------------------
/// -----  WPARAM wParam : id de l'icone
/// -----  LPARAM lParam : paramètre complémentaire : action
/// --------------------------------------------------------------------------------------

lParam correspond aux évènements habituels :
WM_LBUTTONCLK
WM_LBUTTONDBLCLK
WM_RBUTTONDOWN
...


Bonne prog :)

Commentaire de Zulark le 26/11/2008 10:27:48


Bonjours
j'ai essayer ce code mais il me met l'erreur :
error C2440: 'static_cast' : cannot convert from 'void (__thiscall CSauveMails2Dlg::* )(WPARAM,LPARAM)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

sur la ligne :
ON_REGISTERED_MESSAGE(WM_B_NOTIFICATON_ICONE_SYSTRAY, OnNotifyIcon)

il me la met aussi dans ta source :c
je suis sous visual studio 2005.

Commentaire de magic_Nono le 07/12/2008 14:06:14

Bonjour,

effectivement, depuis visual 2003, le paramètre de sortie de la fonction OnNotifyIcon a été modifié.

il est passé de "void "
à "LRESULT "


il suffit de les remplacer et de simuler un retour dans l'appelant qui devient ainsi :



LRESULT CPlaceAppliDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
/// --------------------------------------------------------------------------------------------
/// ---------------- CPlaceAppliDlg::OnNotifyIcon(WPARAM wParam ,LPARAM lParam) ----------------
/// --------------------------------------------------------------------------------------------
/// -----  Objectif : notification sur l'icone de la systray
/// -----  PreCond : /
/// -----  PostCond : /
/// --------------------------------------------------------------------------------------------
/// -----  WPARAM wParam : param
/// -----  LPARAM lParam : param complémentaire
/// --------------------------------------------------------------------------------------------
m_pSysTray->OnNotifyIcon(wParam, lParam);
return 0;
}


une mise à jour portable sera prochainement publiée ici.

Magicalement

Commentaire de Zulark le 10/12/2008 00:21:26

ok merci. :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales