⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monthcalendar.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 4 页
字号:
    PMCCOLORINFO pmcci;    //int bk_color = GetWindowBkColor (hWnd);    UINT uFormat;    pmcci = (PMCCOLORINFO) mc_data->dwClrData;    dwStyle = GetWindowStyle (hWnd);    mcGetRects (hWnd, &rcClient, &rcMonth, &rcYear, &rcMDay);    #ifdef  _FLAT_WINDOW_STYLE    DrawFlatControlFrameEx (hdc, rcClient.left, rcClient.top, rcClient.right,            rcClient.bottom, pmcci->clr_daybk, 1, -1);    DrawFlatControlFrameEx (hdc, rcClient.left+2, rcClient.top+2,                            rcClient.right-2, rcClient.top+2+DATECAP_H(hWnd),                            pmcci->clr_titlebk, 1, -1);#else/*    mcDraw3DMCDownFrame (hdc, rcClient.left, rcClient.top, rcClient.right,            rcClient.bottom, pmcci->clr_daybk);*/    Draw3DDownFrame (hdc, rcClient.left, rcClient.top, rcClient.right,            rcClient.bottom, pmcci->clr_daybk);    Draw3DUpFrame (hdc, rcClient.left+2, rcClient.top+2,                        rcClient.right-2, rcClient.top+2+DATECAP_H(hWnd),                         pmcci->clr_titlebk);#endif    mcGetArrowRects (&rcMonth, &rcYear, &rcAML, &rcAMR, &rcAYL, &rcAYR);    mcDrawPageArrow (mc_data, hdc, &rcAML, FALSE, FALSE);    mcDrawPageArrow (mc_data, hdc, &rcAMR, TRUE, FALSE);    mcDrawPageArrow (mc_data, hdc, &rcAYL, FALSE, FALSE);    mcDrawPageArrow (mc_data, hdc, &rcAYR, TRUE, FALSE);    {        char chYear[5];            const char* pchMon;                uFormat = DT_SINGLELINE | DT_CENTER | DT_VCENTER;        if ((dwStyle & MCS_LANG) == MCS_CHN)            pchMon = chMon_C[mc_data->cur_month-1];        else if ((dwStyle & MCS_LANG) == MCS_ENG_L)            pchMon = chMon_EL[mc_data->cur_month-1];        else if ((dwStyle & MCS_LANG) == MCS_ENG_S)            pchMon = chMon_ES[mc_data->cur_month-1];        else            pchMon = chMon_C[mc_data->cur_month-1];        mcTextOutCenter (hdc, &rcMonth, pchMon);        sprintf(chYear, "%d", mc_data->cur_year);        mcTextOutCenter (hdc, &rcYear, chYear);    }    // draw weekday caption    {        int i, weekitem_w;        const char *pchDay;        RECT rcWeek, rcWeekItem;                rcWeek.left = rcClient.left + WEEK_BORDER;        rcWeek.right = rcClient.right-WEEK_BORDER;        rcWeek.top = rcClient.top + 2 + WEEK_VBORDER1 + DATECAP_H(hWnd);        rcWeek.bottom = rcWeek.top + WEEKFIELD_H(hWnd);        weekitem_w = (rcWeek.right - rcWeek.left)/7;        rcWeekItem.left = rcWeek.left;        rcWeekItem.right = rcWeekItem.left + weekitem_w;        rcWeekItem.top = rcWeek.top;        rcWeekItem.bottom = rcWeek.bottom;        SetBrushColor (hdc, pmcci->clr_weekcaptbk);        FillBox (hdc, rcWeek.left, rcWeek.top, rcWeek.right-rcWeek.left,                    rcWeek.bottom-rcWeek.top);        SetBkColor (hdc, pmcci->clr_weekcaptbk);        SetTextColor (hdc, pmcci->clr_weekcapttext);        for (i = 0; i <= 6; i++) {            //RECT tmp;            if ((dwStyle & MCS_LANG) == MCS_CHN) {                pchDay = chWeek_C[i];            }            else if ((dwStyle & MCS_LANG) == MCS_ENG_L)                pchDay = chWeek_E[i];            else if ((dwStyle & MCS_LANG) == MCS_ENG_S)                pchDay = chWeek_E_S[i];            else {                pchDay = chWeek_C[i];            }            //tmp = rcWeekItem;            TextOut (hdc, rcWeekItem.left+11, rcWeekItem.top+1, pchDay);            //mcTextOutCenter (hdc, &rcWeekItem, pchDay);            //mcTextOutCenter (hdc, &tmp, pchDay);            OffsetRect (&rcWeekItem, weekitem_w, 0);        }    }    // draw month day text    {        mcDrawMonthDay (hdc, &rcMDay, mc_data);    }}// initialize mc_data  static BOOL mcInitMonthCalendarData (HWND hWnd, MONCALDDATA* mc_data){    time_t nowtime;    struct tm *pnt;    RECT rcClient, rcMDay;    PMCCOLORINFO pmcci;        time(&nowtime);    pnt = localtime(&nowtime);    mc_data->sys_year = mc_data->cur_year = pnt->tm_year + 1900;    mc_data->sys_month = mc_data->cur_month = pnt->tm_mon + 1;    mc_data->sys_day = mc_data->cur_day = pnt->tm_mday;        mcGetRects (hWnd, &rcClient, NULL, NULL, &rcMDay);    mc_data->item_w = (rcMDay.right - rcMDay.left) / 7;    mc_data->item_h = (rcMDay.bottom - rcMDay.top) / 6;    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);        mc_data->sys_WeekDay = mc_data->cur_WeekDay;        mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month);    // color info    pmcci = (PMCCOLORINFO) mc_data->dwClrData;    pmcci->clr_titlebk         = MCCLR_DF_TITLEBK;    pmcci->clr_titletext     = MCCLR_DF_TITLETEXT;    pmcci->clr_arrow         = MCCLR_DF_ARROW;    pmcci->clr_arrowHibk     = MCCLR_DF_ARROWHIBK;    pmcci->clr_daybk        = MCCLR_DF_DAYBK;    pmcci->clr_dayHibk        = MCCLR_DF_DAYHIBK;    pmcci->clr_daytext        = MCCLR_DF_DAYTEXT;    pmcci->clr_trailingtext    = MCCLR_DF_TRAILINGTEXT;    pmcci->clr_dayHitext    = MCCLR_DF_DAYHITEXT;    pmcci->clr_weekcaptbk    = MCCLR_DF_WEEKCAPTBK;    pmcci->clr_weekcapttext = MCCLR_DF_WEEKCAPTTEXT;    return TRUE;}/********************************************************************************/static int MonthCalendarCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    HDC hdc;    //PCONTROL pCtrl;    PMONCALDDATA    mc_data;    DWORD dwStyle = GetWindowStyle (hWnd);        //pCtrl    = Control (hWnd);    switch (message) {        case MSG_CREATE:        {            RECT rcWnd;            int rc_w, rc_h;            PMCCOLORINFO pmcci;                        GetWindowRect (hWnd, &rcWnd);            rc_w = rcWnd.right - rcWnd.left;            rc_h = rcWnd.bottom - rcWnd.top;            if (rc_w < MINWNDRECT_W) {                rc_w = MINWNDRECT_W;                MoveWindow (hWnd, rcWnd.left, rcWnd.top, rc_w,                                 rc_h, FALSE);            }            if (rc_h < MINWNDRECT_H) {                rc_h = MINWNDRECT_H;                MoveWindow (hWnd, rcWnd.left, rcWnd.top, rc_w,                                 rc_h, FALSE);            }                        if ((mc_data = (MONCALDDATA *) malloc (sizeof(MONCALDDATA))) == NULL)                return -1;            SetWindowAdditionalData2 (hWnd, (DWORD) mc_data);            if ((pmcci = (MCCOLORINFO*) malloc (sizeof(MCCOLORINFO))) == NULL) {                free (mc_data);                return -1;            }            mc_data->dwClrData = (DWORD) pmcci;            if (!mcInitMonthCalendarData (hWnd, mc_data)) {                free (pmcci);                free (mc_data);                return -1;            }        }            break;                    case MCM_GETCURDAY:        {            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            return mc_data->cur_day;        }            break;                    case MCM_GETCURMONTH:            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            return mc_data->cur_month;            break;                    case MCM_GETCURYEAR:            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            return mc_data->cur_year;            break;                    case MCM_GETCURMONLEN:            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            return mc_data->monlen;            break;                case MCM_SETCURDAY:        {            int newday = (int) wParam;            RECT rcClient, rcMDay;                        mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            if (newday < 1)                 newday = 1;            else if (newday > mc_data->monlen)                 newday = mc_data->monlen;            mcGetRects (hWnd, &rcClient, NULL, NULL, &rcMDay);            hdc = GetClientDC (hWnd);            mcDrawDay (hdc, mc_data, &rcMDay, newday);            ReleaseDC (hdc);            // draw day        }            break;                    case MCM_SETCURMONTH:        {            int newmonth = (int) wParam;            RECT rcClient, rcMonth, rcMDay;                        mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            if (newmonth > 12)                newmonth = 12;            else if (newmonth < 1)                 newmonth = 1;            mcGetRects (hWnd, &rcClient, &rcMonth, NULL, &rcMDay);            hdc = GetClientDC (hWnd);            mcDrawMonth (hWnd, hdc, mc_data, &rcMDay, &rcMonth, newmonth);            ReleaseDC (hdc);        }            break;                    case MCM_SETCURYEAR:        {            int newyear = (int) wParam;            RECT rcClient, rcYear, rcMDay;            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            if (newyear < 1902)    newyear = 1902;            mcGetRects (hWnd, &rcClient, NULL, &rcYear, &rcMDay);            hdc = GetClientDC (hWnd);            mcDrawYear (hWnd, hdc, mc_data, &rcMDay, &rcYear, newyear);            ReleaseDC (hdc);        }            break;                case MCM_SETTODAY:        {            RECT rcClient, rcYear, rcMonth, rcMDay;                        mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            mcGetRects (hWnd, &rcClient, &rcMonth, &rcYear, &rcMDay);            mc_data->cur_day = mc_data->sys_day;            mc_data->cur_month = mc_data->sys_month;            mc_data->cur_year = mc_data->sys_year;            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);                mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month);            InvalidateRect (hWnd, &rcYear, FALSE);            InvalidateRect (hWnd, &rcMonth, FALSE);            InvalidateRect (hWnd, &rcMDay, FALSE);        }            break;        case MCM_SETCURDATE:        {            RECT rcClient, rcYear, rcMonth, rcMDay;            PSYSTEMTIME pcurdate = NULL;            mcGetRects (hWnd, &rcClient, &rcMonth, &rcYear, &rcMDay);            pcurdate = (PSYSTEMTIME) lParam;            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            mc_data->cur_year = pcurdate->year;            mc_data->cur_month = pcurdate->month;            mc_data->cur_day = pcurdate->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);            mc_data->monlen = GetMonLen (mc_data->cur_year, mc_data->cur_month);                        InvalidateRect (hWnd, &rcYear, FALSE);            InvalidateRect (hWnd, &rcMonth, FALSE);            InvalidateRect (hWnd, &rcMDay, FALSE);        }            break;                    case MCM_GETFIRSTWEEKDAY:            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            return mc_data->WeekDay1;            break;                    case MCM_GETCURDATE:        {            PSYSTEMTIME pcurdate = NULL;            pcurdate = (PSYSTEMTIME) lParam;            mc_data = (PMONCALDDATA) GetWindowAdditionalData2 (hWnd);            pcurdate->year = mc_data->cur_year;            pcurdate->month = mc_data->cur_month;            pcurdate->day = mc_data->cur_day;            pcurdate->weekday = mc_data->cur_WeekDay;        }            break;                    case MCM_GETTODAY:        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -