static void toggleCalendar(HWND hDlg) { if (monthcal == NULL) { INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(icex); icex.dwICC = ICC_DATE_CLASSES; InitCommonControlsEx(&icex); monthcal = CreateWindowEx(0, MONTHCAL_CLASS, _T(""), WS_BORDER | WS_POPUP, 0, 0, 0, 0, hDlg, NULL, NULL, NULL); /* subclass month calendar, so that it hides when looses focus */ monthcalOriginalWndProc = (WNDPROC) SetWindowLongPtr(monthcal, GWLP_WNDPROC, (LONG_PTR) MonthCalWndProc); } if (IsWindowVisible(monthcal)) ShowWindow(monthcal, SW_HIDE); else { RECT rc; int x; int y; SYSTEMTIME st; GetWindowRect(GetDlgItem(hDlg, IDC_PICKDATE), &rc); x = rc.left; y = rc.bottom; MonthCal_GetMinReqRect(monthcal, &rc); SetWindowPos(monthcal, NULL, x, y, rc.right, rc.bottom, SWP_SHOWWINDOW | SWP_NOZORDER); y = ASAPInfo_GetYear(edited_info); if (y > 0) { DWORD view; int month = ASAPInfo_GetMonth(edited_info); st.wYear = y; if (month > 0) { int day = ASAPInfo_GetDayOfMonth(edited_info); st.wMonth = month; if (day > 0) { st.wDay = day; view = MCMV_MONTH; } else { st.wDay = 1; view = MCMV_YEAR; } } else { st.wMonth = 1; st.wDay = 1; view = MCMV_DECADE; } (void) MonthCal_SetCurSel(monthcal, &st); (void) MonthCal_SetCurrentView(monthcal, view); } SetFocus(monthcal); } }
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { RECT rect0, rect1; SYSTEMTIME time; switch (msg) { case WM_COMMAND: if (!HIWORD(wp) && LOWORD(wp)) DestroyWindow(hwnd); break; case WM_APP_NOTIFYCALLBACK: switch (LOWORD(lp)) { case WM_CONTEXTMENU: if (!hsubmenu) break; SetForegroundWindow(hwnd); TrackPopupMenuEx(hsubmenu, 0, LOWORD(wp), HIWORD(wp), hwnd, NULL); break; case NIN_KEYSELECT: case NIN_SELECT: if (hidden) { SystemParametersInfo(SPI_GETWORKAREA, 0, &rect0, 0); GetClientRect(hwnd, &rect1); SetWindowPos(hwnd, NULL, rect0.right - rect1.right, rect0.bottom - rect1.bottom, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW); hidden = FALSE; MonthCal_GetToday(hcal, &time); MonthCal_SetCurSel(hcal, &time); MonthCal_SetCurrentView(hcal, MCMV_MONTH); SetForegroundWindow(hcal); } else { ShowWindow(hwnd, SW_HIDE); hidden = TRUE; } break; } break; case WM_DESTROY: tti.exit = TRUE; SetEvent(tti.hnotify); PostQuitMessage(0); break; default: if (msg == WM_TASKBARCREATED) SetEvent(tti.hnotify); else return DefWindowProc(hwnd, msg, wp, lp); } return 0; }