Win32 - mfc - vc6 - place d'une appli : barre des taches ou systray (heure) icone avec menu et action

Description

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_ICONE_SYSTRAY, OnTaskBarCreated)
ON_REGISTERED_MESSAGE(WM_B_NOTIFICATON_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
{
UpdateData(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::OnSysCommand(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

++

Codes Sources

A voir également

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.