begin process at 2012 05 28 15:29:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

Changement de sessions et icones


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Changement de sessions et icones

jeudi 25 novembre 2010 à 10:34:02 | Changement de sessions et icones

Joccy


Bonjour,

Voila, je dessine une icone personnalisable (grâce aux fichiers CMeterIcon.h/cpp trouvés sur le Web et qui fonctionnent très bien ) dans ma barre des taches windows.
Malheureusement, lors d'un changement de session, cette icone disparait !
Il semblerait que cela provienne de la fonction CreateIconIndirect() de Windows que l'on utilise ... (J'avais aussi le problème avec la fonction DuplicateIcon() mais j'ai réussi à m'en débarrasser en faisant simplement une affectation ).
Quelqu'un a-t-il déjà eu ce genre de problème et si oui, comment le résoudre ?
Merci de votre aide.

Joccy
jeudi 25 novembre 2010 à 10:37:47 | Re : Changement de sessions et icones

Joccy

Petites précisions, mon application est un service lancé automatiquement au démarrage, je suis sous VisualStudio 6.0 C++.


Joccy
jeudi 25 novembre 2010 à 22:15:22 | Re : Changement de sessions et icones

ghuysmans99

Membre Club
Lorsque ta fenêtre reçoit le message WM_TASKBARCREATED, tu dois rappeler Shell_NotifyIcon avec NIM_ADD.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
vendredi 26 novembre 2010 à 08:12:34 | Re : Changement de sessions et icones

Joccy

Merci de ta réponse.
J'ai repris le code de quelqu'un d'autre alors ce n'est pas simple.
Ce que je sais c'est qu'au moment de la création de la taskbar, j'appelle bien le shell notification (add) mais à priori ca ne fonctionne pas ...
En fait, on n'utilise pas WM_TASKBARCREATED mais un mecanisme à priori similaire:
[code]
const UINT g_TaskbarRestartMsg = RegisterWindowMessage(TEXT("TaskbarCreated"));
BEGIN_MESSAGE_MAP(CMainFrame, CServiceWindow)
//{{AFX_MSG_MAP(CMainFrame)
...
ON_REGISTERED_MESSAGE(g_TaskbarRestartMsg, OnTaskBarRestart)
//}}AFX_MSG_MAP
// Global help commands
END_MESSAGE_MAP()

afx_msg LRESULT OnTaskBarRestart(UINT p_uiCmd, LONG p_lParam);

LRESULT CMainFrame::OnTaskBarRestart(UINT p_uiCmd, LONG p_lParam)
{
trace_("CMainFrame::OnTaskBarRestart");
removeTaskbarIcon(); // NIM_DELETE
addTaskbarIcon(); // NIM_ADD
UpdateTaskBarIcon(); // calcule la nouvelle icone avec CreateIconIndirect() puis la modifie NIM_MODIFY
return 0;
}
[/code]
Et dans ces fonctions, comme leur nom l'indique, on "joue" avec la taskbar et donc le shell notification ...
Ma trace fonctionne bien, je passe bien dans cette fonction lors du changement de session, mes icones se changent bien, sauf celle qui utilise "CreateIconIndirect" !!!
Pourtant, j'ai beaucoup cherché sur le net et ceux qui ont rencontré un probleme similaire (l'explorer qui crashe et l'icone ne s'affiche plus) ont refait un add et ca marche. Mais pas chez moi ... Est-ce parce que mon appli est un sercice ?
Merci encore.

Joccy
vendredi 26 novembre 2010 à 10:46:59 | Re : Changement de sessions et icones

Joccy


Bon, dans la classe CMeterIcon, on dessine l'icone, avec des HDC et autres contextes.

HICON CMeterIcon::CreateMeterIcon(int *pBarData)
// the returned icon must be cleaned up using DestroyIcon()
{// begin CreateMeterIcon
ICONINFO iiNewIcon;
HICON hNewIcon;
HICON hTmpIcon;
iiNewIcon.fIcon = true;

// create DC's
HDC hScreenDC = ::GetDC(NULL);
HDC hIconDC = CreateCompatibleDC(hScreenDC);
HDC hMaskDC = CreateCompatibleDC(hScreenDC);

hTmpIcon = m_hFrame;

if(!GetIconInfo(hTmpIcon,&iiNewIcon))
{
return NULL;
}

if(!::ReleaseDC(NULL,hScreenDC)) // release this ASAP
{// begin DC not released
return NULL;
}// end DC not released

HGDIOBJ hOldIconDC = ::SelectObject(hIconDC,iiNewIcon.hbmColor);
HGDIOBJ hOldMaskDC = ::SelectObject(hMaskDC,iiNewIcon.hbmMask);

// draw the meters
for(int i = 0;i < m_nNumBars;i++)
if(DrawIconMeter(hIconDC,hMaskDC,pBarData[i],i) == false)
return NULL;


// create icon
::SelectObject(hIconDC,hOldIconDC);
::SelectObject(hMaskDC,hOldMaskDC);

hNewIcon = CreateIconIndirect(&iiNewIcon);

// cleanup
DestroyIcon(hTmpIcon);
DeleteObject(iiNewIcon.hbmColor);
DeleteObject(iiNewIcon.hbmMask);
DeleteDC(hMaskDC);
DeleteDC(hIconDC);

return hNewIcon;

}// end CreateMeterIcon

Peut-etre est-ce le HDC qui n'est plus le bon après changement de session ? (pourtant, je reviens sur le même compte pour le moment)...
Une idée ? Merci.

Joccy
vendredi 26 novembre 2010 à 17:34:45 | Re : Changement de sessions et icones

ghuysmans99

Membre Club
Quelle erreur est retournée par GetLastError ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
lundi 29 novembre 2010 à 09:38:04 | Re : Changement de sessions et icones

Joccy

Ben, c'est pas si simple, mais je viens de trouver d'ou vient le probleme (j'étudie encore pourquoi ca fait planter!! ) :
Dans un timer, si le modify retourne FALSE, je fais un remove / add et à priori c'est là que ca "plante" !!!! Pas tout compris !
Je n'ai pas d'erreur, tout a l'air de fonctionner, sauf que je ne voyais rien dans ma barre, aucune icone de cette appli. En supprimant ce timer, ca marche ...

Merci de votre aide . Je vais considérer que j'ai résolu le problème, mais j'avoue que je ne comprends pas pourquoi.

Joccy


Cette discussion est classée dans : windows, icone, icones, changement, sessions


Répondre à ce message

Sujets en rapport avec ce message

Icone dégueulasse ! [ par Kephren ] Salut, je viens demander de l'aide. J'ai fait une toolbar dans mon prog, via les API sans MFC. Et je vais ensuite mettre les icones des boutons dedans icones et raccourcis [ par LuckyNut ] Bonjour,Comment faire pour qu'une icone ajoutée à un projet MFC ne se retrouve pas dans la liste "changer d'icone" à partir d'un raccourci ?A+ icones dans CListCtrl [ par goondy ] Je suis désolé de poser cette question... j'ai cherché sur le net mais j'avoue que je ne capte que dalle!Bon, c'est en MFC (dsl BruNews... je t'assure Modifier les icones [ par Galmiza ] Salut,Je fais un programme sous Visual Studio C++ 6.0. Est-ce que vous savez comment modifier l'icone qui apparaitra dans la barre des taches a cote d Icones de fichiers ? [ par Gendal67 ] Re-salut all ! :-))Voila, je me demandais comment il était possible d'affecter une icone précise à chaque fichier crée par une application! Je m'expli ajout icone a une boite de dialogue [ par shadow1779 ] Bonjour,j'ai fini de créer un programme totalement avec une boite de dialogue faite avec visual c++, j'ai une icone et je souhaite quel soit a la plac Icones et service [ par albanovisch ] Bonjour, je cherche à savoir quel est le message envoyé par Windows pour indiquer qu'un utilisateur c'est logé sur le poste.Voila j'ai déclaré un serv Icones [ par wanny ] Je n'arrive pas à afficher des icones en 256 couleurs.Pour une même icone définie en 256 couleurs, quand on l'affiche comme icone d'une boite de dialo message windows : redessiner le bureau [ par leprov ] slt a tousbon je viens de me rendre compte d'un bug pas tres sympa sur mon prog: si windows fait un plantage quelconque ggenre "le memoire ne peut etr pb changement de curseur [ par the diouk ] voila, je souhaite changer mon curseur, mais pas avec un de base (IDC_WAIT etc...) j'ai donc trouvé un icône qui me convient, dans le main.cpp j'ai mi


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,484 sec (4)

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