diff --git a/pppc.cc b/pppc.cc index 71ceddb..0fd543e 100644 --- a/pppc.cc +++ b/pppc.cc @@ -92,10 +92,6 @@ int WinMain( switch (msg.message) { case WM_PAINT: - cerr << "WM_PAINT" << endl; - break; - case WM_COMMAND: - cerr << "WM_COMMAND" << endl; break; case WM_CLOSE: case WM_DESTROY: @@ -114,9 +110,20 @@ int WinMain( pport_write(0x0); } break; + case WM_COMMAND: + switch (LOWORD(msg.wParam)) /* menu entry index */ + { + case 0: /* exit */ + running = false; + break; + } + break; + break; } } + Shell_NotifyIcon(NIM_DELETE, &nid); + /* stop listening for session notifications */ session_notification_disable(hWnd); @@ -138,7 +145,33 @@ LRESULT WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) PostQuitMessage(0); break; case WM_ICON_NOTIFY: - cerr << "WM_ICON_NOTIFY" << endl; + if (wParam == 0) + { + if (LOWORD(lParam) == WM_RBUTTONUP) + { + HMENU hMenu = ::CreatePopupMenu(); + MENUITEMINFO mii; + memset(&mii, 0, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STRING | MIIM_ID; + mii.wID = 0; + mii.dwTypeData = "E&xit"; + mii.cch = strlen(mii.dwTypeData); + if (::InsertMenuItem(hMenu, 0, TRUE, &mii) == 0) + { + cerr << "Warning: InsertMenuItem(): " << GetLastError() << endl; + } + POINT pos; + GetCursorPos(&pos); + ::SetForegroundWindow(hWnd); + ::TrackPopupMenu(hMenu, 0, pos.x, pos.y, 0, hWnd, NULL); + + // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly" + ::PostMessage(hWnd, WM_NULL, 0, 0); + + DestroyMenu(hMenu); + } + } break; } return 0;