LRESULT CIWinSyncDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) { switch (LOWORD(lParam)) { case NIN_SELECT: // // for NOTIFYICON_VERSION_4 clients, NIN_SELECT is prerable to listening to mouse clicks and key presses // // directly. if (m_pFlyoutDialog != NULL) { if (m_pFlyoutDialog->IsWindowVisible()) { HideFlyout(); m_bCanShowFlyout = FALSE; } else if (m_bCanShowFlyout) { ShowFlyout(); } } else { ShowFlyout(); } break; case NIN_BALLOONTIMEOUT: RestoreTooltip(); break; case NIN_BALLOONUSERCLICK: RestoreTooltip(); // placeholder for the user clicking on the balloon. //MessageBox(L"The user clicked on the balloon.", L"User click", MB_OK); break; case WM_CONTEXTMENU: POINT const pt = { LOWORD(wParam), HIWORD(wParam) }; ShowContextMenu(this->m_hWnd, pt); break; } return 0; }
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND s_hwndFlyout = NULL; static BOOL s_fCanShowFlyout = TRUE; switch (message) { case WM_CREATE: // add the notification icon if (!AddNotificationIcon(hwnd)) { MessageBox(hwnd, L"Please read the ReadMe.txt file for troubleshooting", L"Error adding icon", MB_OK); return -1; } break; case WM_COMMAND: { int const wmId = LOWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_LOWINK: ShowLowInkBalloon(); break; case IDM_NOINK: ShowNoInkBalloon(); break; case IDM_PRINTJOB: ShowPrintJobBalloon(); break; case IDM_OPTIONS: // placeholder for an options dialog MessageBox(hwnd, L"Display the options dialog here.", L"Options", MB_OK); break; case IDM_EXIT: DestroyWindow(hwnd); break; case IDM_FLYOUT: s_hwndFlyout = ShowFlyout(hwnd); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } } break; case WMAPP_NOTIFYCALLBACK: switch (LOWORD(lParam)) { case NIN_SELECT: // for NOTIFYICON_VERSION_4 clients, NIN_SELECT is prerable to listening to mouse clicks and key presses // directly. if (IsWindowVisible(s_hwndFlyout)) { HideFlyout(hwnd, s_hwndFlyout); s_hwndFlyout = NULL; s_fCanShowFlyout = FALSE; } else if (s_fCanShowFlyout) { s_hwndFlyout = ShowFlyout(hwnd); } break; case NIN_BALLOONTIMEOUT: RestoreTooltip(); break; case NIN_BALLOONUSERCLICK: RestoreTooltip(); // placeholder for the user clicking on the balloon. MessageBox(hwnd, L"The user clicked on the balloon.", L"User click", MB_OK); break; case WM_CONTEXTMENU: { POINT const pt = { LOWORD(wParam), HIWORD(wParam) }; ShowContextMenu(hwnd, pt); } break; } break; case WMAPP_HIDEFLYOUT: HideFlyout(hwnd, s_hwndFlyout); s_hwndFlyout = NULL; s_fCanShowFlyout = FALSE; break; case WM_TIMER: if (wParam == HIDEFLYOUT_TIMER_ID) { // please see the comment in HideFlyout() for an explanation of this code. KillTimer(hwnd, HIDEFLYOUT_TIMER_ID); s_fCanShowFlyout = TRUE; } break; case WM_DESTROY: DeleteNotificationIcon(); PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }