Lad dir mal mein NetSend-programm von meiner Seite runter. Oder die Tutorials, da müßte auch was mit dem TrayIcon drin sein.
Aber hier noch mal in groben Zügen, wie es geht:
Du hast deien Messageloop und deien Fensterprozedur. Jetzt definierst du dir eien Message:
Quelltext
1:
| WM_SHELLNOTIFY = WM_USER + 5; |
die du wie jede andere auch in deiner Fensterprozedur abfangen und behandlen kanns:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| WM_SHELLNOTIFY: begin if wParam = IDI_TRAY then case lParam of WM_LBUTTONUP: begin SetWindowPos(hDlg, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW); ShowWindow(hDlg, SW_RESTORE); Shell_NotifyIcon(NIM_DELETE, @nid); end; WM_RBUTTONDOWN: begin hMenu := LoadMenu(hInstance, MAKEINTRESOURCE(300)); hSubMenu := GetSubMenu(hMenu, 0); GetCursorPos(pt); SetForeGroundWindow(hDlg); TrackPopupMenu(hSubMenu, TPM_LEFTALIGN or TPM_RIGHTBUTTON, pt.x, pt.y, 0, hDlg, NIL); DestroyMenu(hMenu); DestroyMenu(hSubMenu); end; end; end; |
IDI_TRAY ist die ID deines Icons in der TNA, bekommst du im wParam geliefert und im lParam bekommst du gesagt, welcher Mousebutton gedrückt wurde und wie (einfacher Klick, doppelter Klick, gedrückt ode rlosgelassen).
Wie das mit dem Menü geht, siehst du im obigen Code. Das Menü steckt bei mir in diesem Fall in der Ressource. Du kannst es aber auch erst dynamisch zu dem Zeitpunkt erstellen, wen der Klick ausgeführt wird. Die Klicks auf ein Menüitem werden wie üblich in WM_COMMAND behandelt.
Ausführlicher findest du alles in den Tutorials auf meiner Seite.
Viel Spaß noch und mögest du dich ewig an deinem TrayIcon erfreuen.
