void CIWinSyncDlg::OnDestroy() { if (m_puSyncTimer != NULL) { KillTimer(m_puSyncTimer); // Kill The Synchronisation timer m_puSyncTimer = NULL; } //Shut down the synchronisation system if (m_pOfflineFilesClient != NULL) { m_pOfflineFilesClient->Cleanup(); free(m_pOfflineFilesClient); m_pOfflineFilesClient = NULL; } DeleteNotificationIcon(); if (m_pszCurrentSyncPath != NULL) { free(m_pszCurrentSyncPath); } if (m_pszLogPath != NULL) { free(m_pszLogPath); } for(int i=0;i<5;i++) { if(m_apszLastResults[i] != NULL) { free(m_apszLastResults[i]); } } if (m_pFlyoutDialog != NULL) { m_pFlyoutDialog->DestroyWindow(); delete(m_pFlyoutDialog); m_pFlyoutDialog = NULL; } CDialog::OnDestroy(); }
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; }