Fornax Geschrieben 23. Oktober 2001 Teilen Geschrieben 23. Oktober 2001 Aloha, habe folgende Frage: Ich möchte meinen Dialog per Befehl in den Systemtray schicken können, aber wie wird das gemacht. Bis jetzt habe ich nur CWND::ShowWindow gefunden, und damit gehts nur in die Taskleiste. Hat jmd einen Vorschlag? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mst Geschrieben 23. Oktober 2001 Teilen Geschrieben 23. Oktober 2001 Es gibt eine automatische von MFC-gegebene Funktion, die einen Dialog in den Tray verkleinert. Erstmal wird der Dialog wie ShowWindow() (1. Schritt) ausgeblendet und dann wird das das TrayIcon durch die Funktion Shell_NotifyIcon() (2. Schritt). Hilfe zum Anzeigen einer TrayIcon gibt es auch in der MSDN z.B. Q149276. Ich hoffe, dass ich dier helfen konnte Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fornax Geschrieben 24. Oktober 2001 Autor Teilen Geschrieben 24. Oktober 2001 Hallo nochmal & THX mst, die Antwort hat geholfen, allerdings auch 3 neue Fragen aufgeworfen... 1) Wie schaffe ich es, der Struktur NOTIFYICONDATA beizubringen, mehr als ein Attribut (nämlich NIF_TIP und NIF_ICON) zu setzen. Bis jetzt ignoriert er immer eines. 2) Gibt es auch eine Funktion, um den Eintrag in der Taskleiste zu verstecken, sodass nur noch das Icon im Tray zu sehen ist? 3) Wie kann man dem Icon im Tray ein Menue zuweisen? Oder läuft das über das Attribut NIF_MESSAGE? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
haddock Geschrieben 24. Oktober 2001 Teilen Geschrieben 24. Oktober 2001 zu 2.: schon mit bitweiser oder-Verknüpfung versucht ? NOTIFYICONDATA nyd; nyd.uFlags = NIF_ICON | NIF_TIP; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 24. Oktober 2001 Teilen Geschrieben 24. Oktober 2001 1.) Das bitweise Oder hilft. wie schon gesagt wurde. 2.) man kann nach dem hinzufügen des icon in die notification area das fenster mit ShowWindow(hWnd, SW_HIDE) verstecken. dadurch verschwindet der eintrag in der taskleiste. 3.) wenn man die maus über das icon bewegt, bekommt das etsprechende fenster (hWnd in der Struktur NOTIFYICONDATA) die entsprechenden nachrichten. WM_MOUSEMOVE, WM_LBUTTONDOWN, ... . diese kann man auswerten. dabei steht in wParam oder lParam - bin mir nicht ganz sicher - die id des icon (uID in der Struktur NOTIFYICONDATA). dann entsprechende das menü laden, mausposition ermitteln und menü anzeigen. es soll auch gehen die uCallbackMessage zu setzen. diese wird dann dem fenster gesendet und man kann sie auswerten. dann steht in lParam die eigentliche nachricht drin (WM_MOUSEMOVE, ...). das hat bei mir allerdings noch nie funktioniert. <FONT COLOR="#a62a2a" SIZE="1">[ 24. Oktober 2001 10:36: Beitrag 1 mal editiert, zuletzt von maddin ]</font> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fornax Geschrieben 24. Oktober 2001 Autor Teilen Geschrieben 24. Oktober 2001 Hmm, erstmal Danke für die Tipps betreffs bitweise Eingabe und SW_HIDE. Das Bitweise lesen funktioniert, allerdings scheint das ShowWindow(SW_HIDE) keinerlei Effekt zu zeigen. Auch nach diesem Befehl ist das Prg noch in der Taskleiste sichtbar. @maddin: THX für den Tipp zu 3, allerdings hätt ich da noch eine Frage: Wie kann man das, was in den Hwnd geschrieben wird, auswerten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 24. Oktober 2001 Teilen Geschrieben 24. Oktober 2001 wenn du gelesen hast, das irgendwas in hwdn geschrieben wird, dann hast du denke ich was falsche gelesen. man kann in der struktur NOTIFYICONDATA festlegen, welches fenster der besitzer vom icon ist. diese fenster bekommt dann die nachrichten, wenn sich die maus über dem icon bewegt, ... . sieht dann in etwa so aus: // Icon anzeigen NOTIFYICONDATA nid; nid.hwnd = hMyWnd; // Handle für das Fenster nid.uID = IDC_TRAYICON; // ID meines ICONS // ... restlichen Werte festlegen Shell_NotifyIcon (NIM_ADD, &nid); // das passende WindowProc LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wP, LPARAM lP); { switch (uMsg) { //... case WM_LBUTTONDOWN: if (lP /* || wP */ == IDC_TRAYICON) // ... Maustaste drücken behandeln. } // ... } so sollte es laufen. problem ist bloß, das ich nicht daran gedacht habe, das du mit der mfc arbeitest. da weiß ich leider nicht genau, wie das mit der nachrichtenverarbeitung läuft. aber dafür habe ich das: http://codeguru.earthweb.com/shell/tbhide.html http://codeguru.earthweb.com/shell/AniTrayIcon.html http://codeguru.earthweb.com/shell/systemtray.shtml das erste ist ein beispielprogramm mit deinem problem. als zweites eine klasse zum icon anzeigen. sogar animierte. und das dritte ist ein artikel über das thema. hoffe das hilft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.