Newsgroup: it.comp.programmare.win32
Titolo: Cambiare icona

Salve a tutti.
Sto cercando aiuti o suggerimenti per risolvere un problema.
La questione è semplice:
Devo scrivere un programma che crei un'icona sulla TaskBar di Windows.
All'icona è associato un menù con relative opzioni e comandi, ecc...
Il tutto c'è ed è già funzionante (il programma NON fa uso di MFC e, per
motivi tecnici, non potrà utilizzarle)
Vorrei fare in modo che, in seguito ad un evento, si modifichino il
suggerimento associato all'icona (tip) e l'immagine stessa che appare
sulla taskbar.
Per il primo punto tutto ok; nella modifica dell'immagine emergono
alcuni problemi. Come fare?
Qui di seguito è riportato un stralcio di codice...
HWND hWnd;
HINSTANCE hInst;
HICON hMainIcon, hSecondIcon;
HMENU hPopMenu;
NOTIFYICONDATA structNID;
WNDCLASS wc;
/*HINSTANCE*/	
hInst = hInstance;
if(!hPrevInstance)
{
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance,(LPCTSTR)MAKEINTRESOURCE(IDI_TRAYICON));
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "IconTest";
RegisterClass(&wc);
}
/*HWND*/
hWnd = CreateWindow("IconTest",
      "Title",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      NULL,
      NULL,
      hInstance,
      NULL);
/*ICON*/
hMainIcon = LoadIcon(hInstance,(LPCTSTR)MAKEINTRESOURCE(IDI_TRAYICON));
hSecondIcon=LoadIcon(hInstance,(LPCTSTR)MAKEINTRESOURCE(IDI_TRAYICONb));
/*NOTIFYICONDATA*/
structNID.cbSize = sizeof(NOTIFYICONDATA); // sizeof the struct
structNID.hWnd = (HWND) hWnd; //handle of the window
structNID.uID = IDI_TRAYICON; //ID of the icon in the system tray  
structNID.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; // flags         
strcpy(structNID.szTip,"Suggerimento iniziale"); //Text of the tooltip
structNID.hIcon = hMainIcon; // handle of the Icon
structNID.uCallbackMessage = WM_USER_SHELLICON; 
Shell_NotifyIcon(NIM_ADD, &structNID); // create the icon!
-----------------------------------------------------------------------
La modifica del testo avviene così:
strcpy(structNID.szTip,"Suggerimento modificato");
Shell_NotifyIcon(NIM_MODIFY, &structNID);   // modify the tip!
Per cambiare l'immagine ho provato (con insuccesso)
structNID.uID = IDI_TRAYICONb;
structNID.hIcon = hSecondIcon;
Qualcuno saprebbe darmi una mano?
GRAZIE!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao, Pietro!
Il giorno 16/07/2004 alle ore 00:04 hai scritto:
 PB> Per cambiare l'immagine ho provato (con insuccesso)
 PB>
 PB> structNID.uID = IDI_TRAYICONb;
 PB> structNID.hIcon = hSecondIcon;
Devi usare sempre IDI_TRAYICON per identificare l'icona da modificare. L'ID
e' l'ID nella taskbar (puoi avere piu' di un'icona per programma), non l'ID
dell'icona nelle risorse del programma.
Bye
-- 
There is no ignorance; There is knowledge.
http://www.maccasoft.com

 Bye
Grazie per il suggerimento!!!
Ho provato, una volta modificato lo stato del programma, a piazzare
l'istruzione:
Shell_NotifyIcon(NIM_DELETE,&structNID);
//cancello l'icona presente e riparto da zero.
Quindi ricreo il tutto (HINSTANCE, HWND, hMainIcon, ecc...) con il nuovo
ID e funzia!
Magari, ottimizzando il codice e passando un paio di parametri in più,
risparmio una funzione e semplifico il tutto.
Grazie e buon Week end.
(Buone Vacanze...)
Pietro d.Bernardone


 risparmio una funzione e semplifico il tutto.
Veramente lui intendeva dire un'altra cosa...  -.-'
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it