Problem mit TrayIcon
-
Ich habe ein kleines Problem beim Erstellen meines TrayIcons.
Hier ist der Code meines "kleinen" Programmes:///////////// // CD-Tray // ///////////// // Das Programm verwendet OOP - wenn dann - nur rudimentär // defines #define WM_CDTRAY_MOUSEMOVE (WM_USER + 1) // user defined tray message #define TRAY_ID 0x200 // user defined tray identifier // benutzte Headers #include <windows.h> // globale Variabeln HINSTANCE g_hInstance; // gebraucht Prototypen LRESULT CALLBACK MainProc (HWND, UINT, WPARAM, LPARAM); // Ab hier gehts los int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // globale Variabeln setzen g_hInstance = hInstance; // Registering Window-Class WNDCLASSEX wcMainWnd; memset (&wcMainWnd, 0, sizeof (wcMainWnd)); wcMainWnd.cbSize = sizeof (WNDCLASSEX); wcMainWnd.hCursor = LoadCursor (NULL, IDC_ARROW); wcMainWnd.hIcon = LoadIcon (NULL, IDI_APPLICATION); wcMainWnd.hInstance = g_hInstance; wcMainWnd.lpfnWndProc = MainProc; wcMainWnd.lpszClassName = "CDTrayWndClass"; wcMainWnd.style = CS_HREDRAW | CS_VREDRAW; (RegisterClassEx (&wcMainWnd)); // Creating Window HWND hwndMainWnd; hwndMainWnd = CreateWindowEx ( NULL, "CDTrayWndClass", "CD Tray", WS_OVERLAPPEDWINDOW, 0, 0, 400, 400, NULL, NULL, g_hInstance, NULL); // TODO: Error routin ShowWindow (hwndMainWnd, nCmdShow); // Message Pump MSG msgMsg; while (GetMessage (&msgMsg, hwndMainWnd, 0, 0)); { TranslateMessage (&msgMsg); DispatchMessage (&msgMsg); } return 0; } // Haupt-Message Pump LRESULT CALLBACK MainProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { char szTip[64] = "CD Tray"; NOTIFYICONDATA nifCDTrayIcon; memset (&nifCDTrayIcon, 0, sizeof (nifCDTrayIcon)); nifCDTrayIcon.cbSize = sizeof (NOTIFYICONDATA); nifCDTrayIcon.hIcon = LoadIcon (NULL, IDI_APPLICATION); nifCDTrayIcon.hWnd = hWnd; nifCDTrayIcon.uCallbackMessage = WM_CDTRAY_MOUSEMOVE; nifCDTrayIcon.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; nifCDTrayIcon.uID = NULL; strcpy (nifCDTrayIcon.szTip, szTip); nifCDTrayIcon.szTip[strlen (szTip)] = '\0'; Shell_NotifyIcon (NIM_ADD, &nifCDTrayIcon); break; } default: return DefWindowProc (hWnd, uMsg, wParam, lParam); } return 0; }
Mein Problem ist nun, dass nachdem das TrayIcon gezeichnet wurde und das Fenster erstellt das Programm hängt. Ich weiß nicht wieso. In der Doku steht ich muss bei WM_PAINT 0 zurückgeben, was er ja auch tut. Ich versteh also nicht was da passiert. Außerdem ist meine CPU-Auslastung immer auf 100% solange das Fenster aktiviert ist (also so mit Fokus drauf, Titelleiste blau und so).
Ich hoffe ihr könnt mir helfen.
Danke schonmal im **Voraus.MfG
Michael Beuse**
-
hehe, das hat doch garnichts mit dem Tray-Icon zu tun. Du hast bei der Message Loop ein Semikolon zuviel gemacht. :p
-
So ein Mist. Danke dir. MMMrrr, mann das ist ja zum in den ***** beißen. Naja, man lernt also seinen Code genau durch zuschauen auch wenn er kompiliert wird.
-
hm...wieso gibst du ihm die id NULL?
-
War nur zum testen. Ich habe auch schon gemerkt, dass die id NULL nicht ganz so glückliche gewählt war.