Beenden auch ohne Fenster verhindern
-
Hm, nun habe ich 2 Probleme:
1. Bei mir sieht das mit den styles so aus:
wc.style = CS_HREDRAW | CS_VREDRAW;
Wo soll ich da WS_VISIBLE weglassen?
2. Ein Icon, welches ich in der Systray erzeugt habe verschwindet, obwohl das Problem noch nicht beendet ist. Ich bin nach dem Codeausschnitt in der FAQ gegangen. Was mache ich falsch.
Danke,
flo
-
WS_VISIBLE sollst du bei CreateWindow weglassen und nicht bei der Klasse
-
Statt z.B. WS_OVERLAPPEDWINDOW?
wie sieht es aus mit meinem Systray Problem? Hast Du da auch eine Lösung?
-
Damit es besonders einfach für dich wird, eine kleine Anleitung:
[code]
1.) Lad dir meine Klasse (jaja, Eigenwerbung) "CTrayIcon" von meiner Homepage (siehe Signatur) runter.
2.) Erstelle in deinem Prog einen globalen CTrayIcon-Zeiger
3.) WinMain:
4.) Lade dir dein Icon in ein HICON-Objekt
5.) Erstelle das neue CTrayIcon-Objekt (mit new) und gib dem Konstruktor dein Icon mit
6.) Erstelle eine Message-Loop. Eine solche sieht so aus:
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
7.) Lösche nach der Message-Loop das CTrayIcon-Objekt per delete[/code]
Fertig!Und da soll noch einer sagen, ich sei schlecht zu den Noobs.
[ Dieser Beitrag wurde am 11.04.2003 um 21:48 Uhr von WebFritzi editiert. ]
-
warum der ganze ärger mit dem new und delete?
-
OK, du kannst das CTrayIcon-Objekt auch statisch in der WinMain erzeugen. Hatte ich ned dran gedacht.
[ Dieser Beitrag wurde am 11.04.2003 um 21:57 Uhr von WebFritzi editiert. ]
-
ja, grundlagen hab ich doch drauf. aber warum nicht das objekt auf dem stack erstellen? dann biete ne setIcon methode an, das man das icon auch woanders als im konstruktor einstellen kann.
-
Jaja, hab meine Beitrag editiert. Noch bevor du deinen geschrieben hattest.
-
ok, da sind wir uns ja jetzt einig
aber funzt nicht. hab es noch der anleitung gemacht
-
Dein Code?
Ud gib bitte an, WAS nicht funzt![ Dieser Beitrag wurde am 11.04.2003 um 22:17 Uhr von WebFritzi editiert. ]
-
ach alles scheiße :o
ich geh jetzt erstmal mit freunden einen darauf trinken und morgen beschreib ich alles nochmal ganz genau
-
Du kannst doch deinen Code jetzt schnell mal posten, man!
-
neeee, ist in mehrere dateien aufgeteilt. da blickst du nicht durch
ich fasse das morgen alles in eine kurzes beispiel zusammen
du bist ja ganz schön ungeduldig.
-
@WebFritzi: Ich wollte mir das Teil saugen!! Aber deine Seite ist irgendwie korrupt.
-
-
So, hab meine Klasse jetzt verbessert. Ich hatte sie darauf ausgelegt, dass ein Fenster die Nachrichten des TrayIcons bekommt. Jetzt braucht man kein Fenster mehr und kann die Nachrichten direkt in einer WindowProc abfangen. Den neuen Quellcode werd ich gleich hochladen.
@<flo>: Ich hab ein Testprogramm gemacht. Dies funktioniert hundertpro. Kannste ja so in dein Projekt einbauen. Ist jetzt echt easy. So sieht's aus:
#include <windows.h> // Der Klassen-Header von CTrayIcon #include "CTrayIcon.h" // In der Resource sind ein Icon und ein Menu enthalten #include "Resource.rh" //--------------------------------------------------------------------------- LRESULT CALLBACK TrayProc(HWND, UINT, WPARAM, LPARAM lParam); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { // Eine MSG-Struktur für die Message-Loop MSG msg; // Ein CTrayIcon //====================================================================== // // 1.Parameter: klar! //====================================================================== // // 2.Parameter: Hier wird die WNDPROC übergeben, die alle Nachrichten abfängt // Es kann auch ein Fenster angegeben werden. Dann empfängt dieses die Nachrichten // Die Nachrichten sind entweder WM_TRAYMESSAGE oder WM_COMMAND // WM_TRAYMESSAGE: // wParam: Ein Zeiger auf die CTrayIcon-Instanz, die die Message sendet // lParam: MouseAction wie z.B. WM_LBUTTONUP //----------------------------------------------------- // WM_COMMAND: // Kommt dann an, wenn auf ein MenuItem geklickt wird. // a) TrayIcon mit Fenster: Das Menu muss dem Fenster gehören // b) TrayIcon mit WNDPROC: Die Nachricht wird ganz normal wie in a) behandelt //====================================================================== // // 3.Parameter: Hier kannst du ein HICON oder eine Icon-ID angeben //====================================================================== // // 4.Parameter: Der Text, der erscheint, wenn der Mauszeiger über dem // TrayIcon verharrt //====================================================================== CTrayIcon TrayIcon(hInstance, (WNDPROC)TrayProc, ID_ICO_LETTER, TEXT("My Hint")); // Wir geben dem TrayIcon das Popup-Menu // 1.Parameter: Das Menu, indem das Popup-Menu enthalten ist // Man ein HMENU oder die ID angeben // 2.Parameter: Position des PopupMenus im Menu (hier: das erste) TrayIcon.SetPopupMenu(ID_TRAYPOPUPMENU, 0); // Das TrayIcon wird angezeigt // Ausblenden geht mit CTrayIcon::Hide() TrayIcon.Show(); // Die Message-Loop while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } //--------------------------------------------------------------------------- LRESULT CALLBACK TrayProc(HWND, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch(uiMsg) { // Eine Mausaktion ist durchgeführt worden case WM_TRAYMESSAGE: { switch(lParam) { // Es wurde der linke Mousebutton losgelassen case WM_LBUTTONUP: MessageBox(NULL, TEXT("Du hast mich geklickt"), TEXT("INFO"), MB_OK); break; } } break; // Es wurde im Menu geklickt case WM_COMMAND: { switch( LOWORD(wParam) ) { // Das MenuItem mit der ID ID_MI_EXIT wurde angeklickt case ID_MI_EXIT: // Das Programm wird beendet PostQuitMessage(0); break; } } break; } return 0; } //---------------------------------------------------------------------------
Ach ja, falls dich das Resource-Skript dazu noch interessiert:
#include "Resource.rh" //------------------------------------------------------- ID_ICO_LETTER ICON DISCARDABLE "Letter2.ico" //------------------------------------------------------- ID_TRAYPOPUPMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "Show NetSend" ID_MI_SHOW MENUITEM "Exit NetSend" ID_MI_EXIT END END //-------------------------------------------------------
[ Dieser Beitrag wurde am 12.04.2003 um 00:35 Uhr von WebFritzi editiert. ]