📄 monthcalendar.c
字号:
PSYSTEMTIME ptoday = NULL; ptoday = (PSYSTEMTIME) lParam; mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); ptoday->year = mc_data->sys_year; ptoday->month = mc_data->sys_month; ptoday->day = mc_data->sys_day; ptoday->weekday = mc_data->sys_WeekDay; } break; case MCM_GETMINREQRECTW: return MINWNDRECT_W; break; case MCM_GETMINREQRECTH: return MINWNDRECT_H; break; case MCM_GETCOLOR: { PMCCOLORINFO pmcci, pmccinfo; pmccinfo = (PMCCOLORINFO) lParam; mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); pmcci = (PMCCOLORINFO) mc_data->dwClrData; pmccinfo->clr_titlebk = pmcci->clr_titlebk; pmccinfo->clr_titletext = pmcci->clr_titletext; pmccinfo->clr_arrow = pmcci->clr_arrow; pmccinfo->clr_arrowHibk = pmcci->clr_arrowHibk; pmccinfo->clr_daybk = pmcci->clr_daybk; pmccinfo->clr_dayHibk = pmcci->clr_dayHibk; pmccinfo->clr_daytext = pmcci->clr_daytext; pmccinfo->clr_trailingtext = pmcci->clr_trailingtext; pmccinfo->clr_dayHitext = pmcci->clr_dayHitext; pmccinfo->clr_weekcaptbk = pmcci->clr_weekcaptbk; pmccinfo->clr_weekcapttext = pmcci->clr_weekcapttext; } break; case MCM_SETCOLOR: { PMCCOLORINFO pmcci, pmcci_new; mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); pmcci = (PMCCOLORINFO) mc_data->dwClrData; pmcci_new = (PMCCOLORINFO) lParam; if (pmcci_new->clr_titlebk >= 0) pmcci->clr_titlebk = pmcci_new->clr_titlebk; if (pmcci_new->clr_titletext >= 0) pmcci->clr_titletext = pmcci_new->clr_titletext; if (pmcci->clr_arrow >= 0) pmcci->clr_arrow = pmcci_new->clr_arrow; if (pmcci->clr_arrowHibk >= 0) pmcci->clr_arrowHibk = pmcci_new->clr_arrowHibk; if (pmcci->clr_daybk >= 0) pmcci->clr_daybk = pmcci_new->clr_daybk; if (pmcci->clr_dayHibk >= 0) pmcci->clr_dayHibk = pmcci_new->clr_dayHibk; if (pmcci->clr_daytext >= 0) pmcci->clr_daytext = pmcci_new->clr_daytext; if (pmcci->clr_trailingtext >= 0) pmcci->clr_trailingtext = pmcci_new->clr_trailingtext; if (pmcci->clr_dayHitext >= 0) pmcci->clr_dayHitext = pmcci_new->clr_dayHitext; if (pmcci->clr_weekcaptbk >= 0) pmcci->clr_weekcaptbk = pmcci_new->clr_weekcaptbk; if (pmcci->clr_weekcapttext >= 0) pmcci->clr_weekcapttext = pmcci_new->clr_weekcapttext; InvalidateRect (hWnd, NULL, FALSE); } break; case MSG_DESTROY: mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); mcMonthCalendarCleanUp (mc_data); free (mc_data); break; /* case MSG_MOUSEMOVE: { int x, y; RECT rcClient, rcMonth, rcYear, rcMDay; RECT rcAML, rcAMR, rcAYL, rcAYR; mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); x = LOSWORD (lParam); y = HISWORD (lParam); mcGetRects (hWnd, &rcClient, &rcMonth, &rcYear, &rcMDay); mcGetArrowRects (&rcMonth, &rcYear, &rcAML, &rcAMR, &rcAYL, &rcAYR); if (PtInRect (&rcAMR, x, y)) { hdc = GetClientDC (hWnd); mcDrawPageArrow (mc_data, hdc, &rcAMR, TRUE, TRUE); ReleaseDC (hdc); } else if (PtInRect (&rcAML, x, y)) { hdc = GetClientDC (hWnd); mcDrawPageArrow (mc_data, hdc, &rcAML, FALSE, TRUE); ReleaseDC (hdc); } else if (PtInRect (&rcAYR, x, y)) { hdc = GetClientDC (hWnd); mcDrawPageArrow (mc_data, hdc, &rcAYR, TRUE, TRUE); ReleaseDC (hdc); } else if (PtInRect (&rcAYL, x, y)) { hdc = GetClientDC (hWnd); mcDrawPageArrow (mc_data, hdc, &rcAYL, FALSE, TRUE); ReleaseDC (hdc); } else { hdc = GetClientDC (hWnd); mcDrawPageArrow (mc_data, hdc, &rcAMR, TRUE, FALSE); mcDrawPageArrow (mc_data, hdc, &rcAML, FALSE, FALSE); mcDrawPageArrow (mc_data, hdc, &rcAYR, TRUE, FALSE); mcDrawPageArrow (mc_data, hdc, &rcAYL, FALSE, FALSE); ReleaseDC (hdc); } } break; */ case MSG_LBUTTONDOWN: { int x, y; RECT rcClient, rcMonth, rcYear, rcMDay; RECT rcAML, rcAMR, rcAYL, rcAYR; x = LOSWORD (lParam); y = HISWORD (lParam); mcGetRects (hWnd, &rcClient, &rcMonth, &rcYear, &rcMDay); mcGetArrowRects (&rcMonth, &rcYear, &rcAML, &rcAMR, &rcAYL, &rcAYR); InflateRect (&rcAML, 6, 2); InflateRect (&rcAMR, 6, 2); InflateRect (&rcAYR, 6, 2); InflateRect (&rcAYL, 6, 2); if (PtInRect (&rcAMR, x, y)) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); if (mc_data->cur_month != 12) mc_data->cur_month++; else { mc_data->cur_month = 1; mc_data->cur_year++; InvalidateRect (hWnd, &rcYear, FALSE); } mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcMonth, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); } else if (PtInRect (&rcAML, x, y)) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); if (mc_data->cur_month != 1) mc_data->cur_month--; else { if (mc_data->cur_year <= 1902) break; mc_data->cur_month = 12; mc_data->cur_year--; InvalidateRect (hWnd, &rcYear, FALSE); } mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcMonth, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); } else if (PtInRect (&rcAYR, x, y)) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); mc_data->cur_year++; mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcYear, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); //InvalidateRect (hWnd, NULL, FALSE); } else if (PtInRect (&rcAYL, x, y)) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); if (mc_data->cur_year <= 1902) break; mc_data->cur_year--; mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcYear, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); //InvalidateRect (hWnd, NULL, FALSE); } else if (PtInRect (&rcMDay, x, y)) { int line, weekday, pline, pweekday, posindex; RECT rcItemDay; //rcPItemDay; mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); pline = mc_data->cur_line; pweekday = mc_data->cur_WeekDay; mcGetItemRectFromPos (mc_data, &rcMDay, &rcItemDay, &line, &weekday, x, y); posindex = line * 7 + weekday + 1; if (posindex < mc_data->WeekDay1+1) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); if (mc_data->cur_month != 1) mc_data->cur_month--; else { if (mc_data->cur_year <= 1902) break; mc_data->cur_month = 12; mc_data->cur_year--; InvalidateRect (hWnd, &rcYear, FALSE); } mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcMonth, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); } else if (posindex >mc_data->monlen + mc_data->WeekDay1) { if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); if (mc_data->cur_month != 12) mc_data->cur_month++; else { mc_data->cur_month = 1; mc_data->cur_year++; InvalidateRect (hWnd, &rcYear, FALSE); } mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month); while (mc_data->cur_day > mc_data->monlen) { mc_data->cur_day--; } mc_data->WeekDay1 = GetWeekDay(mc_data->cur_year, mc_data->cur_month, 1); mcGetCurDayPos (mc_data, mc_data->cur_day, &mc_data->cur_line, &mc_data->cur_WeekDay); InvalidateRect (hWnd, &rcMonth, FALSE); InvalidateRect (hWnd, &rcMDay, FALSE); } else if (line != pline || weekday != pweekday) { int newday; if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DATECHANGE); if (dwStyle & MCS_NOTIFY) NotifyParent (hWnd, GetDlgCtrlID (hWnd), MCN_DAYCHANGE); hdc = GetClientDC (hWnd); newday = (line*7+weekday+1) - (mc_data->WeekDay1+1) + 1; mcDrawDay (hdc, mc_data, &rcMDay, newday); ReleaseDC (hdc); } } } break; case MSG_LBUTTONUP: break; case MSG_PAINT: hdc = BeginPaint (hWnd); mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd); mcDrawCalendar (hWnd, hdc, mc_data); EndPaint (hWnd, hdc); return 0; default: break; } return DefaultControlProc (hWnd, message, wParam, lParam);}#endif /* _EXT_CTRL_MONTHCAL */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -