Tray-Icon (aus der FAQ) - Welches Icon?
-
Hi,
ich habe den Thread in der FAQ zum Tray Icon gelesen, und es klappt auch halbwegs.
FAQ: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39365.htmlNun habe ich aber eine Frage dazu und wollte die nicht direkt dadrunter klatschen (weiß nicht ob man da überhaupt antworten kann^^).
Es gibt in dem Beispiel das Handle 'HICON hProgramIcon;', welches mir wahrscheinlich angibt, welches icon genutzt wird, richtig?
Wie schreibe ich nun, das er mein Icon aus Ordner XYZ nehmen soll?Lieben Gruß,
Felix
-
mit LoadImage kannst Du auch Icons laden und diese dann benutzen.
-
Ok, danke! Habe das ganze nun mit LoadIcon gemacht, aber irgendwie verschwindet das Icon immer nach einer Sekunde, wer eine Lösung?
Bisher schauts eben aus wie im Beispiel:NOTIFYICONDATA nidTrayIcon; HICON hProgramIcon; HWND hMainWindow; void createTrayIcon() { //Create Tray Icon char szTip[64] = "Tray-Icon"; hProgramIcon = LoadIcon(NULL, IDI_APPLICATION); nidTrayIcon.cbSize = sizeof(nidTrayIcon); nidTrayIcon.hIcon = hProgramIcon; nidTrayIcon.uID = 0x0200; nidTrayIcon.hWnd = hMainWindow; //Exemplarisch, HWND des Fensters an dessen MessageLoop die Nachricht geschickt werden soll nidTrayIcon.uCallbackMessage = (WM_USER + 1); nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; strcpy(nidTrayIcon.szTip, szTip); nidTrayIcon.szTip[strlen(szTip)] = '\0'; Shell_NotifyIcon(NIM_ADD, &nidTrayIcon); }Edith sagt:
Whoops, es verschwindet nicht, nur wenn ich mit der Maus drübe gehe
Das werd ich dann mal versuchen zu ändern...
-
#define WM_MYTRAYICON (WM_USER + 1) TCHAR szTip[64] = TEXT("My Application - Tray"); NOTIFYICONDATA nid; nid.cbSize = sizeof(nidTrayIcon); nid.hIcon = static_cast<HICON>(LoadImage(NULL, TEXT("Test.ico"), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR | LR_LOADFROMFILE)); nid.hWnd = hWnd; // Halt dein HWND nid.uCallbackMessage = WM_MYTRAYICON; //Exemplarisch nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; // sollst halt nen Icon haben und falls du mit der Maus drüber gehst auch so nen kleinen ballon ... und du willst ja benachrichtigt werden, wenn jemand auf dein Icon klickt. nid.uID = 0x0200; // Eine beliebige ID damit es eindeutig ist ... lstrcpy(nid.szTip, szTip); nid.szTip[lstrlen(szTip)] = '\0'; Shell_NotifyIcon(NIM_ADD, &nid);Soo ^^
Referenz
LoadImage Function ()
-
nid.hIcon = static_cast<HICON>(LoadImage(NULL, TEXT("Test.ico"), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR | LR_LOADFROMFILE));Das ergibt bei mir:
"error C2065: 'static_cast' : undeclared identifier"
"error C2275: 'HICON' : illegal use of this type as an expression"Ja, bin blutiger Anfänger... ^^
Hast du es in C oder C++ geschrieben? Oder sind das ganze nur Variablen, welche ich ersetzen muss? Blick da grad net so ganz durch
greetz,
felix
-
static_cast ist C++ ... sonnst mach da halt (HICON)LoadImage ... draus ... dann ist es C-Style ^^
-
Danke, geht einwandfrei!

-
Aber ein Problem habe ich dabei noch.
Dort steht wie ich ein Menü erstelle, das ist mir klar.
Nun bin ich dabei dafür das Handle zu schreiben etc...
Aber das Menü öffnet sich ja erst, wenn ich auf das Icon klicke, dazu kommt es aber nie, da das Icon sofort verschwindet wenn ich mit der Maus drüber gehe.
Weiß jemand wodran es liegen könnte?
Braucht ihr noch weitere Infos um zu helfen?Gruß,
Felix
-
kann sein das ich was überlesen habe, aber läuft dein programm zu dem zeitpunkt wo du mit der maus drübergehst noch ? oder isses da schon beendet ?
irgendwie passiert mir das gleiche, aber nur wenn ich mein programm nicht normal beende und dabei das icon wieder entferne. dann bleibt es solange stehn bis ich mit der maus drüber geh
-
Das Programm läuft noch.
Problem ist aber gelöst.
Habe es nun nicht mit Hilfe der WinAPI gelöst, sondern mit Hilfe von IUP.Gruß,
Felix