发信人: headstream() 
整理人: mrcloud(2000-11-28 17:28:17), 站内信件
 | 
 
 
从某个站上当的,忘了是哪里,不是我写的 
 ///.H 
 
 /*********************************************************************  
 ****** 
    致看到这些源代码的兄弟: 
        你好! 
        这本来是我为一个商业PDA产品开发的日历程序,最近移植于PC机上, 所以  
 算法 
    和数据部分是用纯C++写的,不涉及MFC,所有的代码都是以短节省存储空间为主  
 要目 
    的. 
    很高兴你对这些代码有兴趣,你可以随意复制和使用些代码,唯一有一点小小  
 的 
    愿望:在你使用和复制给别人时,别忘注明这些代码作者:-)。程序代码也就罢  
 了,后 
    面的数据可是我辛辛苦苦从万年历上找出来输进去的。 
    如果你有什么好的意见不妨Mail给我。 
 
        [email protected] 
    或 
    [email protected] 
                                                                  2000年  
 3月 
 **********************************************************************  
 ******/ 
 #if !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__IN  
 CLUDED_) 
 #define AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__INCLUDE  
 D_ 
 
 #if _MSC_VER > 1000 
 #pragma once 
 #endif // _MSC_VER > 1000 
 // Calendar1.h : header file 
 //////////////////////////////////////////////////////////////////////  
 /////// 
 // CCalendar window 
 extern const WORD START_YEAR; 
 extern const WORD END_YEAR; 
 
 //define user message select changed 
 #define UM_SELCHANGE  (WM_USER+101) 
 
 class CCalendar : public CWnd 
 { 
 private: 
 WORD    m_iYear, m_iMonth, m_iDay; 
 CBitmap m_oBitMapList[42]; 
 CMenu   m_oPopMenu; 
 
 public: 
 COLORREF m_dwBackColor,  m_dwForeColor; 
 COLORREF m_dwSelColor,   m_dwSelForeColor; 
 COLORREF m_dwTitleBkColor, m_dwTitleColor; 
 
 public: 
 CCalendar(WORD iYear, WORD iMonth, WORD iDay); 
 CCalendar(); 
 virtual BOOL Create(RECT &rect, CWnd * pParentWnd, UINT nID); 
 
 public: 
 WORD GetYear(){return m_iYear;} 
 WORD GetMonth(){return m_iMonth;} 
 WORD GetDay(){return m_iDay;} 
 void GetDate(WORD &iYear, WORD &iMonth, WORD &iDay); 
 BOOL SetDate(WORD iYear, WORD iMonth, WORD iDay); 
 
 protected: 
 CButton m_obutToday; 
 //{{AFX_MSG(CCalendar) 
 afx_msg void OnPaint(); 
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
 afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); 
 //}}AFX_MSG 
 afx_msg void OnTitleBkColor(); 
 afx_msg void OnTitleColor(); 
 afx_msg void OnSelColor(); 
 afx_msg void OnForeColor(); 
 DECLARE_MESSAGE_MAP() 
 
 
 public: 
 //判断iYear是不是闰年 
     static BOOL IsLeapYear(WORD iYear) 
 {return !(iYear%4)&&(iYear%100) || !(iYear%400);} 
 
 //计算iYear,iMonth,iDay对应是星期几 1年1月1日 --- 65535年12月31日 
 static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay); 
 
 //返回iYear年iMonth月的天数 1年1月 --- 65535年12月 
 static WORD MonthDays(WORD iYear, WORD iMonth); 
 
 //返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,  
 
 //高字为第二个iLunarMonth月的天数,否则高字为0  
 // 1901年1月---2050年12月 
 static LONG LunarMonthDays(WORD iLunarYear, WORD iLunarMonth); 
 
 //返回阴历iLunarYear年的总天数 
 // 1901年1月---2050年12月 
 static WORD LunarYearDays(WORD iLunarYear); 
 
 //返回阴历iLunarYear年的闰月月份,如没有返回0 
 // 1901年1月---2050年12月 
 static WORD GetLeapMonth(WORD iLunarYear); 
 
 //把iYear年格式化成天干记年法表示的字符串 
 static void FormatLunarYear(WORD  iYear, char *pBuffer); 
 
 //把iMonth格式化成中文字符串 
 static void FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar = TRU  
 E); 
 
     //把iDay格式化成中文字符串 
 static void FormatLunarDay(WORD  iDay, char *pBuffer); 
 
 //计算公历两个日期间相差的天数  1年1月1日 --- 65535年12月31日 
 static LONG CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndDay,  
 
                      WORD iStartYear = START_YEAR,  
  WORD iStartMonth =1, WORD iStartDay =1); 
 
 //计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24  
 
 //1901年1月1日---2050年12月31日 
 static WORD GetLunarDate(WORD iYear, WORD iMonth, WORD iDay, 
                      WORD &iLunarYear, WORD &iLunarMonth, WORD &iLun 
  arDay); 
 
 public: 
 virtual ~CCalendar(); 
 
 private: 
 void   l_InitData(); 
 
 //计算从1901年1月1日过iSpanDays天后的阴历日期 
 static void   l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay,   
 LONG iSpanDays); 
     //计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气 
 static WORD   l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay); 
 
 WORD l_CalcSelectDay(POINT * pt); 
 void l_PaintTitle(CPaintDC &dc); 
 void l_PaintDate(CPaintDC &dc); 
 inline void l_PaintOneDay(CPaintDC &dc, CDC &imgdc, WORD &iDay,  
                         WORD &iLunarYear, 
                         WORD &iLunarMonth, WORD &iLuanrDay,  
 LONG startx, LONG starty); 
 }; 
 
 //////////////////////////////////////////////////////////////////////  
 /////// 
 
 //{{AFX_INSERT_LOCATION}} 
 // Microsoft Visual C++ will insert additional declarations immediatel  
 y before the previous line. 
 
 #endif // !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6  
 D4__INCLUDED_) 
 
 ///.CPP 
 /*********************************************************************  
 ****** 
    致看到这些源代码的兄弟: 
        你好! 
        这本来是我为一个商业PDA产品开发的日历程序,最近移植于PC机上, 所以  
 算法 
    和数据部分是用纯C++写的,不涉及MFC,所有的代码都是以短节省存储空间为主  
 要目 
    的. 
    很高兴你对这些代码有兴趣,你可以随意复制和使用些代码,唯一有一点小小  
 的 
    愿望:在你使用和复制给别人时,别忘注明这些代码作者:-)。程序代码也就罢  
 了,后 
    面的数据可是我辛辛苦苦从万年历上找出来输进去的。 
    如果你有什么好的意见不妨Mail给我。 
 
        [email protected] 
    或 
    [email protected] 
                                                                  2000年  
 3月 
 **********************************************************************  
 ******/ 
 #include "stdafx.h" 
 #include "Calendar.h" 
 #include "Calendar1.h" 
 #include "Calendarfrm.h" 
 
 #ifdef _DEBUG 
 #define new DEBUG_NEW 
 #undef THIS_FILE 
 static char THIS_FILE[] = __FILE__; 
 #endif 
 
 //////////////////////////////////////////////////////////////////////  
 /////// 
 // CCalendar 
 
 
 extern WORD gLunarMonthDay[]; 
 extern BYTE gLunarMonth[]; 
 extern BYTE gLunarHolDay[]; 
 
 const WORD START_YEAR =1901; 
 const WORD END_YEAR   =2050; 
 
 void CCalendar::l_InitData() 
 { 
 SYSTEMTIME systime; 
 ::GetSystemTime(&systime); 
 
 m_iYear  = systime.wYear; 
 m_iMonth = systime.wMonth; 
 m_iDay   = systime.wDay; 
 
 m_dwBackColor      = RGB(255,255,255); 
 m_dwForeColor      = RGB(0,0,0); 
 m_dwSelColor       = RGB(150,150,230); 
 m_dwSelForeColor   = RGB(255,255,255); 
 m_dwTitleBkColor     = RGB(190,70,70); 
 m_dwTitleColor = RGB(255,255,0); 
 
 } 
 
 CCalendar::CCalendar(WORD iYear, WORD iMonth, WORD iDay) 
 { 
    if(!SetDate(iYear, iMonth, iDay)) 
    l_InitData(); 
 } 
 
 CCalendar::CCalendar() 
 { 
    l_InitData(); 
 } 
 
 CCalendar::~CCalendar() 
 { 
   DestroyWindow();  
 } 
 
 
 BEGIN_MESSAGE_MAP(CCalendar, CWnd) 
 //{{AFX_MSG_MAP(CCalendar) 
 ON_WM_PAINT() 
 ON_WM_LBUTTONDOWN() 
 ON_WM_CONTEXTMENU() 
 ON_WM_CREATE() 
 //}}AFX_MSG_MAP 
 ON_COMMAND(ID_TITLEBKCOLOR, OnTitleBkColor) 
 ON_COMMAND(ID_TITLECOLOR,   OnTitleColor) 
 ON_COMMAND(ID_SELCOLOR,     OnSelColor) 
 ON_COMMAND(ID_FORECOLOR,    OnForeColor) 
 END_MESSAGE_MAP() 
 
 #define COL_WIDTH    32 
 #define ROW_HEIGHT   20 
 #define TITLE_HEIGHT 20 
 
 BOOL CCalendar::Create(RECT &rect, CWnd *pParentWnd, UINT nID) 
 { 
     CString szClassName = AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|  
 
                                       CS_HREDRAW|CS_VREDRAW, 
                                               0, (HBRUSH)CBrush(RGB(25  
 5,255,255)), 0); 
 
 rect.right = rect.left + COL_WIDTH*7 +4; 
     rect.bottom = rect.top + TITLE_HEIGHT+ROW_HEIGHT*6 +10 ; 
 if(!CWnd::CreateEx(WS_EX_CLIENTEDGE, szClassName, _T(""), 
                 WS_CHILD|WS_VISIBLE|WS_TABSTOP, rect,  
 pParentWnd, nID, NULL))  
 
    return FALSE; 
 
     UpdateWindow(); 
     for(int i=0; i<42; i++) 
 m_oBitMapList[i].LoadBitmap(IDB_BITMAP1+i);  
 
 m_oPopMenu.CreatePopupMenu(); 
 m_oPopMenu.AppendMenu(MF_STRING, ID_TITLEBKCOLOR, _T("标题背景色...")  
 ); 
 m_oPopMenu.AppendMenu(MF_STRING, ID_TITLECOLOR,   _T("标题前景色...")  
 );  
 m_oPopMenu.AppendMenu(MF_STRING, ID_FORECOLOR ,   _T("日期前景色...")  
 ); 
   m_oPopMenu.AppendMenu(MF_STRING, ID_SELCOLOR,     _T("选中区颜色..."  
 )); 
 
 return TRUE; 
 } 
 
 //////////////////////////////////////////////////////////////////////  
 /////// 
 // CCalendar message handlers 
 void CCalendar::l_PaintTitle(CPaintDC &dc) 
 { 
    CRect rect ; 
    GetClientRect(&rect); 
 
    rect.left ++;   rect.top ++; 
    rect.right --;  rect.bottom = rect.top + TITLE_HEIGHT; 
    dc.FillRect(&rect, &CBrush(m_dwTitleBkColor)); 
 
    dc.SetBkColor(m_dwTitleBkColor);  
    dc.SetTextColor(m_dwTitleColor);  
 
    int startx = rect.left +8; 
    char sztext[][3]={"日","一","二","三","四","五","六"}; 
    for(int i=0; i <7; i++) 
    { 
       dc.TextOut(startx, rect.top +2, sztext[i]); 
       startx += COL_WIDTH; 
    } 
 } 
 
 void CCalendar:: l_PaintOneDay(CPaintDC &dc, CDC &imgdc, WORD &iDay,   
 
    WORD &iLunarYear, WORD &iLunarMonth,  
    WORD &iLunarDay,  
    LONG startx, LONG starty) 
 { 
  char text[3]; 
      sprintf(text, "%2d", iDay); 
 
      // select icon 
  if(iLunarDay!=1) 
       imgdc.SelectObject(&m_oBitMapList[iLunarDay-1]); 
  else 
       imgdc.SelectObject(&m_oBitMapList[29+iLunarMonth]); 
 
      // if day == current day 
  if(iDay++ == m_iDay) 
  { 
 dc.FillRect(&CRect(startx-1, starty,  
    startx +COL_WIDTH-3, starty + ROW_HEIGHT),  
 &CBrush(m_dwSelColor));  
 dc.SetTextColor(m_dwSelForeColor); 
 dc.SetBkColor(m_dwSelColor); 
 dc.TextOut(startx, starty +2, text); 
 dc.SetBkColor(m_dwBackColor); 
 dc.SetTextColor(m_dwForeColor);  
 dc.BitBlt(startx+17, starty +2, 8,16,&imgdc,0,0,MERGEPAINT);   
  } 
  else 
  { 
 dc.TextOut(startx, starty+2, text); 
 dc.BitBlt(startx+17, starty +2, 8,16,&imgdc,0,0,SRCCOPY);   
  } 
 
  if(iLunarDay<29) 
   iLunarDay++; 
  else 
  { 
  LONG days = LunarMonthDays(iLunarYear, iLunarMonth); 
  if(!HIWORD(days) && iLunarDay == LOWORD(days)) 
  iLunarMonth = (iLunarMonth)%12+1; 
  if(iLunarDay < LOBYTE(days)) 
  iLunarDay++; 
  else 
  iLunarDay =1; 
  } 
 } 
 
 void CCalendar::l_PaintDate(CPaintDC &dc) 
 { 
    CDC imgdc; 
    imgdc.CreateCompatibleDC(&dc); 
 
    RECT rect; 
    GetClientRect(&rect); 
    rect.top  +=TITLE_HEIGHT+6; 
 
    dc.SetBkColor(m_dwBackColor); 
    dc.SetTextColor(m_dwForeColor); 
 
    WORD day =1; 
    WORD iLunarYear, iLunarMonth, iLunarDay; 
    GetLunarDate(m_iYear, m_iMonth, 1, iLunarYear, iLunarMonth, iLunarD  
 ay);  
 
    for(int i=0; i<6; i++, rect.top += ROW_HEIGHT) 
    { 
    long startx = rect.left +2; 
    for(int j=0; j<7; j++,startx += COL_WIDTH) 
    { 
    if(j < WeekDay(m_iYear, m_iMonth, 1) && i==0) 
      continue; 
 
           if(day > MonthDays(m_iYear, m_iMonth)) 
    break; 
 
            l_PaintOneDay(dc, imgdc, day, iLunarYear, iLunarMonth, 
                             iLunarDay, startx, rect.top); 
    } 
 } 
 } 
 
 void CCalendar::OnPaint()  
 { 
 CPaintDC dc(this); // device context for painting 
 
 CFont *font = ((CCalendarFrm *)GetParent())->GetDispFont(); 
 dc.SelectObject(font); 
     dc.SetMapMode(0);  
 l_PaintTitle(dc); 
 l_PaintDate(dc); 
 
 } 
 
 LONG CCalendar::CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndD  
 ay, 
                     WORD  iStartYear, WORD iStartMonth, WORD iStartD 
  ay) 
 { 
 WORD monthday[]={0, 31, 59 ,90, 120, 151, 181, 212, 243, 273, 304, 33  
 4};  
 
 //计算两个年份1月1日之间相差的天数 
 LONG iDiffDays =(iEndYear - iStartYear)*365; 
 iDiffDays += (iEndYear-1)/4 - (iStartYear-1)/4; 
 iDiffDays -= ((iEndYear-1)/100 - (iStartYear-1)/100); 
 iDiffDays += (iEndYear-1)/400 - (iStartYear-1)/400; 
 
     //加上iEndYear年1月1日到iEndMonth月iEndDay日之间的天数 
     iDiffDays += monthday[iEndMonth-1] + 
                            (IsLeapYear(iEndYear)&&iEndMonth>2? 1: 0) 
  ; 
     iDiffDays += iEndDay; 
 
 //减去iStartYear年1月1日到iStartMonth月iStartDay日之间的天数 
 iDiffDays -= (monthday[iStartMonth-1] +  
                   (IsLeapYear(iStartYear)&&iStartMonth>2 ? 1: 0)); 
     iDiffDays -= iStartDay; 
 return iDiffDays; 
 } 
 
 void  CCalendar::l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay  
 , LONG iSpanDays) 
 { 
 //阳历1901年2月19日为阴历1901年正月初一 
 //阳历1901年1月1日到2月19日共有49天 
     if(iSpanDays <49) 
 { 
 iYear  = START_YEAR-1; 
 if(iSpanDays <19) 
 {  
   iMonth = 11;   
   iDay   = 11+WORD(iSpanDays); 
 } 
 else 
 { 
 iMonth = 12; 
 iDay   =  WORD(iSpanDays) -18; 
 } 
 return ; 
 } 
 //下面从阴历1901年正月初一算起 
 iSpanDays -=49; 
     iYear  = START_YEAR; 
 iMonth = 1; 
 iDay   = 1; 
 //计算年 
 LONG tmp = LunarYearDays(iYear);  
 while(iSpanDays >= tmp) 
 { 
 iSpanDays -= tmp; 
 tmp = LunarYearDays(++iYear); 
 } 
     //计算月 
 tmp = LOWORD(LunarMonthDays(iYear, iMonth)); 
 while(iSpanDays >= tmp) 
 { 
 iSpanDays -= tmp; 
     if(iMonth == GetLeapMonth(iYear)) 
 { 
 tmp  = HIWORD(LunarMonthDays(iYear, iMonth)); 
 if(iSpanDays < tmp) 
 break; 
 iSpanDays -= tmp; 
 } 
 tmp = LOWORD(LunarMonthDays(iYear, ++iMonth)); 
 } 
 //计算日 
 iDay += WORD(iSpanDays); 
 } 
 
 WORD CCalendar::GetLunarDate(WORD iYear, WORD iMonth, WORD iDay, 
                      WORD &iLunarYear, WORD &iLunarMonth, WORD &iLun 
  arDay) 
 { 
    l_CalcLunarDate(iLunarYear, iLunarMonth, iLunarDay,  
                               CalcDateDiff(iYear, iMonth, iDay)); 
 
    return l_GetLunarHolDay(iYear, iMonth, iDay); 
 } 
 
 //根据节气数据存储格式,计算阳历iYear年iMonth月iDay日对应的节气, 
 WORD  CCalendar::l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay)  
 
 { 
 BYTE &flag = gLunarHolDay[(iYear - START_YEAR)*12+iMonth -1]; 
 WORD day; 
 if(iDay <15) 
  day= 15 - ((flag>>4)&0x0f); 
 else 
 day = ((flag)&0x0f)+15; 
 if(iDay == day) 
    return (iMonth-1) *2 + (iDay>15? 1: 0) +1;  
 else 
    return 0; 
 } 
 
 void CCalendar::GetDate(WORD &iYear, WORD &iMonth, WORD &iDay)  
 { 
 iYear  = m_iYear; 
 iMonth = m_iMonth; 
 iDay   = m_iDay; 
 } 
 
 BOOL CCalendar::SetDate(WORD iYear, WORD iMonth, WORD iDay) 
 { 
   if(iYear < START_YEAR || iYear > END_YEAR || iMonth <1 || iMonth >12  
 ) 
      return FALSE; 
 
   if(iDay <1 || iDay > MonthDays(iYear, iMonth)) 
     return FALSE; 
 
   m_iYear   = iYear; 
   m_iMonth  = iMonth; 
   m_iDay    = iDay; 
 
   return TRUE; 
 }  
 
 WORD CCalendar::WeekDay(WORD iYear, WORD iMonth, WORD iDay) 
 { 
     //数组元素monthday[i]表示第i个月以前的总天数除以7的余数 
 WORD monthday[]={0,3,3,6,1,4,6,2,5,0,3,5}; 
 WORD iDays = (iYear-1)%7 + (iYear-1)/4 - (iYear-1)/100 +(iYear-1)/400  
 ; 
 iDays += (monthday[iMonth-1] +iDay) ; 
 //如果iYear是闰年 
     if(IsLeapYear(iYear) && iMonth>2) 
 iDays++; 
 //返回:0,1,2,3,4,5,6表日、一、二、三、四、五、六 
 return iDays%7; 
 } 
 
 WORD CCalendar::MonthDays(WORD iYear, WORD iMonth) 
 { 
 switch(iMonth) 
 { 
 case 1:case 3:case 5:case 7:case 8:case 10:case 12: 
 return 31; 
 break; 
 case 4:case 6:case 9:case 11: 
 return 30; 
 break; 
 case 2: 
 //如果是闰年 
 if(IsLeapYear(iYear)) 
 return 29; 
 else 
 return 28; 
 break; 
 } 
 return 0; 
 } 
 
 WORD CCalendar::GetLeapMonth(WORD iLunarYear) 
 { 
 BYTE &flag = gLunarMonth[(iLunarYear - START_YEAR)/2]; 
   return  (iLunarYear - START_YEAR)%2 ? flag&0x0f : flag>>4; 
 } 
 
 LONG CCalendar::LunarMonthDays(WORD iLunarYear, WORD iLunarMonth) 
 { 
 if(iLunarYear < START_YEAR)  
 return 30L; 
 
 WORD height =0 ,low =29; 
 int iBit = 16 - iLunarMonth; 
 
     if(iLunarMonth > GetLeapMonth(iLunarYear) && GetLeapMonth(iLunarYe  
 ar)) 
    iBit --; 
 
 if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<<iBit)) 
         low ++; 
      
 if(iLunarMonth == GetLeapMonth(iLunarYear)) 
 if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<< (iBit -1))) 
      height =30; 
 else  
  height =29; 
 
 return MAKELONG(low, height); 
 } 
 
 WORD CCalendar::LunarYearDays(WORD iLunarYear) 
 { 
 /* 
 WORD days=348 ; //12*29 
 int  month = 12 ; 
 //如果iYear年有闰月,则为13个月 
     if(gLanarMonth[iYear - START_YEAR])  
 month ++; 
     //如果某月是三十天则days++ 
 while(month >=0 && (gLanarMonthDay[iYear - START_YEAR] & (1 << (16 -   
 month)))) 
 {    
 days ++;  
     month --; 
 } 
 return days; 
 */ 
 WORD days =0; 
 for(WORD  i=1; i<=12; i++) 
 {  
         LONG  tmp = LunarMonthDays(iLunarYear ,i);  
 days += HIWORD(tmp); 
 days += LOWORD(tmp); 
 } 
     return days; 
 } 
 
 void CCalendar::FormatLunarYear(WORD  iYear, char *pBuffer) 
 { 
 char szText1[]="甲乙丙丁戊己庚辛壬癸"; 
 char szText2[]="子丑寅卯辰巳午未申酉戌亥"; 
 char szText3[]="鼠牛虎免龙蛇马羊猴鸡狗猪"; 
 
 memcpy(pBuffer,  szText1+((iYear-4)%10)*2,2); 
 memcpy(pBuffer+2,szText2+((iYear-4)%12)*2,2); 
 pBuffer[4]=' '; 
 memcpy(pBuffer+5,szText3+((iYear-4)%12)*2,2); 
 strcpy(pBuffer+7,"年"); 
 } 
 
 void CCalendar::FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar) 
  { 
    if(!bLunar && iMonth==1) 
    { 
    strcpy(pBuffer, " 一月"); 
    return; 
    } 
 
    char szText[]="正二三四五六七八九十"; 
    if(iMonth<=10) 
    { 
    memcpy(pBuffer, " ", 2); 
        memcpy(pBuffer+2, szText + (iMonth -1)*2, 2); 
        strcpy(pBuffer+4 , "月"); 
    return; 
    } 
    if (iMonth == 11) 
    strcpy(pBuffer, "十一"); 
    else 
    strcpy(pBuffer, "十二"); 
     strcpy(pBuffer+4 , "月"); 
 
     
 } 
 void CCalendar::FormatLunarDay(WORD  iDay, char *pBuffer) 
 { 
     char szText1[]="初十廿三"; 
 char szText2[]="一二三四五六七八九十"; 
 if(iDay != 20 && iDay !=30) 
 { 
 memcpy(pBuffer, szText1 + (iDay-1)/10*2 ,2); 
 memcpy(pBuffer+2, szText2 + ((iDay-1)%10)*2 ,2); 
 pBuffer[4]='\0'; 
 } 
 else 
 { 
         memcpy(pBuffer, szText1 + iDay/10*2, 2); 
 strcpy(pBuffer+2, szText2 +18); 
 } 
 } 
 WORD CCalendar::l_CalcSelectDay(POINT * pt) 
 { 
 RECT rect; 
     GetClientRect(&rect); 
 WORD iRow = (pt->y - rect.top -26)/ROW_HEIGHT; 
 WORD iCol = (pt->x - rect.left )/COL_WIDTH; 
 
 WORD startcol ,endrow, endcol; 
 startcol = WeekDay(m_iYear, m_iMonth, 1); 
 endcol   = WeekDay(m_iYear, m_iMonth, MonthDays(m_iYear,m_iMonth)); 
 
 endrow   = (MonthDays(m_iYear, m_iMonth) + startcol -1)/7 ; 
     if(iRow == 0 && iCol < startcol || iRow == endrow && iCol > endcol  
  ||  iRow > endrow) 
 return 0; 
 return iRow *7 + iCol + 1 - startcol ; 
 } 
 
 void CCalendar::OnLButtonDown(UINT nFlags, CPoint point)  
 { 
 WORD day = l_CalcSelectDay(&point); 
 if(day !=0 && day != m_iDay) 
 { 
 m_iDay = day; 
 ::PostMessage(GetParent()->m_hWnd, UM_SELCHANGE, MAKELONG(m_iMonth,  
 m_iYear), m_iDay);  
     } 
 SetFocus();  
 CWnd::OnLButtonDown(nFlags, point); 
 } 
 
 
 void CCalendar::OnContextMenu(CWnd* pWnd, CPoint point)  
 { 
 m_oPopMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, p  
 oint.y, 
 this);  
 } 
 
 void CCalendar::OnTitleBkColor() 
 { 
   CColorDialog colordlg; 
   if(colordlg.DoModal() != IDOK) 
   return; 
   m_dwTitleBkColor = colordlg.GetColor(); 
   Invalidate();  
 } 
 
 void CCalendar::OnTitleColor() 
 { 
 CColorDialog colordlg; 
   if(colordlg.DoModal() != IDOK) 
   return; 
   m_dwTitleColor = colordlg.GetColor(); 
   Invalidate();  
 } 
 
 void CCalendar::OnSelColor() 
 { 
   CColorDialog colordlg; 
   if(colordlg.DoModal() != IDOK) 
   return; 
    
   m_dwSelColor = colordlg.GetColor(); 
   Invalidate();  
 } 
 
 void CCalendar::OnForeColor() 
 { 
 CColorDialog colordlg; 
   if(colordlg.DoModal() != IDOK) 
   return; 
    
   m_dwForeColor = colordlg.GetColor(); 
   Invalidate();  
 } 
 
 #undef COL_WIDTH 
 #undef ROW_HEIGHT 
 #undef TITLE_HEIGHT 
 /*********************************************************************  
 ********* 
   下面为阴历计算所需的数据,为节省存储空间,所以采用下面比较变态的存储方  
 法. 
     
 **********************************************************************  
 *********/ 
 //数组gLunarDay存入阴历1901年到2100年每年中的月天数信息, 
 //阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表3  
 0天,否则为29天 
 WORD gLunarMonthDay[]= 
 { 
 //测试数据只有1901.1.1 --2050.12.31 
   0X4ae0, 0Xa570, 0X5268, 0Xd260, 0Xd950, 0X6aa8, 0X56a0, 0X9ad0, 0X4a  
 e8, 0X4ae0,   //1910 
   0Xa4d8, 0Xa4d0, 0Xd250, 0Xd548, 0Xb550, 0X56a0, 0X96d0, 0X95b0, 0X49  
 b8, 0X49b0,   //1920 
   0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada8, 0X2b60, 0X9570, 0X4978, 0X49  
 70, 0X64b0,   //1930 
   0Xd4a0, 0Xea50, 0X6d48, 0X5ad0, 0X2b60, 0X9370, 0X92e0, 0Xc968, 0Xc9  
 50, 0Xd4a0,   //1940 
   0Xda50, 0Xb550, 0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc958, 0Xa950, 0Xb4  
 a8, 0X6ca0,   //1950 
   0Xb550, 0X55a8, 0X4da0, 0Xa5b0, 0X52b8, 0X52b0, 0Xa950, 0Xe950, 0X6a  
 a0, 0Xad50,   //1960 
   0Xab50, 0X4b60, 0Xa570, 0Xa570, 0X5260, 0Xe930, 0Xd950, 0X5aa8, 0X56  
 a0, 0X96d0,   //1970 
   0X4ae8, 0X4ad0, 0Xa4d0, 0Xd268, 0Xd250, 0Xd528, 0Xb540, 0Xb6a0, 0X96  
 d0, 0X95b0,   //1980 
   0X49b0, 0Xa4b8, 0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada0, 0Xab60, 0X93  
 70, 0X4978,   //1990 
   0X4970, 0X64b0, 0X6a50, 0Xea50, 0X6b28, 0X5ac0, 0Xab60, 0X9368, 0X92  
 e0, 0Xc960,   //2000 
   0Xd4a8, 0Xd4a0, 0Xda50, 0X5aa8, 0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc9  
 58, 0Xa950,   //2010 
   0Xb4a0, 0Xb550, 0Xb550, 0X55a8, 0X4ba0, 0Xa5b0, 0X52b8, 0X52b0, 0Xa9  
 30, 0X74a8,   //2020 
   0X6aa0, 0Xad50, 0X4da8, 0X4b60, 0X9570, 0Xa4e0, 0Xd260, 0Xe930, 0Xd5  
 30, 0X5aa0,   //2030 
   0X6b50, 0X96d0, 0X4ae8, 0X4ad0, 0Xa4d0, 0Xd258, 0Xd250, 0Xd520, 0Xda  
 a0, 0Xb5a0,   //2040 
   0X56d0, 0X4ad8, 0X49b0, 0Xa4b8, 0Xa4b0, 0Xaa50, 0Xb528, 0X6d20, 0Xad  
 a0, 0X55b0,   //2050 
    
 }; 
 
 //数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节  
 存两年 
 BYTE  gLunarMonth[]= 
 { 
 0X00, 0X50, 0X04, 0X00, 0X20,   //1910 
 0X60, 0X05, 0X00, 0X20, 0X70,   //1920 
 0X05, 0X00, 0X40, 0X02, 0X06,   //1930 
 0X00, 0X50, 0X03, 0X07, 0X00,   //1940 
 0X60, 0X04, 0X00, 0X20, 0X70,   //1950 
 0X05, 0X00, 0X30, 0X80, 0X06,   //1960 
 0X00, 0X40, 0X03, 0X07, 0X00,   //1970 
 0X50, 0X04, 0X08, 0X00, 0X60,   //1980 
 0X04, 0X0a, 0X00, 0X60, 0X05,   //1990 
 0X00, 0X30, 0X80, 0X05, 0X00,   //2000 
 0X40, 0X02, 0X07, 0X00, 0X50,   //2010 
 0X04, 0X09, 0X00, 0X60, 0X04,   //2020 
 0X00, 0X20, 0X60, 0X05, 0X00,   //2030 
 0X30, 0Xb0, 0X06, 0X00, 0X50,   //2040 
 0X02, 0X07, 0X00, 0X50, 0X03    //2050 
 }; 
 
 //数组gLanarHoliDay存放每年的二十四节气对应的阳历日期 
 //每年的二十四节气对应的阳历日期几乎固定,平均分布于十二个月中 
 //   1月          2月         3月         4月         5月         6月   
    
 //小寒 大寒   立春  雨水   惊蛰 春分   清明 谷雨   立夏 小满   芒种 夏  
 至 
 //   7月          8月         9月         10月       11月        12月   
   
 //小暑 大暑   立秋  处暑   白露 秋分   寒露 霜降   立冬 小雪   大雪 冬  
 至 
 
 /*********************************************************************  
 ************ 
  节气无任何确定规律,所以只好存表,要节省空间,所以.... 
   下面这种存法实在是太变态了,你就将就着看吧 
 **********************************************************************  
 ************/ 
 //数据格式说明: 
 //如1901年的节气为 
 //  1月     2月     3月   4月    5月   6月   7月    8月   9月    10月   
  11月     12月 
 // 6, 21, 4, 19,  6, 21, 5, 21, 6,22, 6,22, 8, 23, 8, 24, 8, 24, 8, 24  
 , 8, 23, 8, 22 
 // 9, 6,  11,4,   9, 6,  10,6,  9,7,  9,7,  7, 8,  7, 9,  7,  9, 7,  9  
 , 7,  8, 7, 15 
 //上面第一行数据为每月节气对应日期,15减去每月第一个节气,每月第二个节气  
 减去15得第二行 
 // 这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节  
 气数据,低位存放 
 //第二个节气的数据,可得下表 
 
 BYTE gLunarHolDay[]= 
 { 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1901 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1902 
 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7  
 8,   //1903 
 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8  
 7,   //1904 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1905 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1906 
 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7  
 8,   //1907 
 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1908 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1909 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1910 
 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7  
 8,   //1911 
 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1912 
 0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1913 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1914 
 0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7  
 8,   //1915 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1916 
 0X95, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8  
 7,   //1917 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1918 
 0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7  
 8,   //1919 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1920 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8  
 7,   //1921 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1922 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7  
 8,   //1923 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1924 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8  
 7,   //1925 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1926 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1927 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1928 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1929 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1930 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1931 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1932 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1933 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1934 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1935 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1936 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1937 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1938 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1939 
 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1940 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1941 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1942 
 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1943 
 0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1944 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1945 
 0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7  
 7,   //1946 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1947 
 0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //1948 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79, 0X77, 0X8  
 7,   //1949 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7  
 7,   //1950 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7  
 8,   //1951 
 0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //1952 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1953 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68, 0X78, 0X8  
 7,   //1954 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1955 
 0X96, 0XA5, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //1956 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1957 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1958 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1959 
 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1960 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1961 
 0X96, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1962 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1963 
 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1964 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1965 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1966 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1967 
 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1968 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1969 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1970 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7  
 7,   //1971 
 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1972 
 0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1973 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1974 
 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7  
 7,   //1975 
 0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X89, 0X88, 0X78, 0X87, 0X8  
 7,   //1976 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //1977 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8  
 7,   //1978 
 0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7  
 7,   //1979 
 0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1980 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X77, 0X8  
 7,   //1981 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1982 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7  
 7,   //1983 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1984 
 0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //1985 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1986 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78, 0X8  
 7,   //1987 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //1988 
 0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1989 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //1990 
 0X95, 0XB4, 0X96, 0XA5, 0X86, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1991 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //1992 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1993 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1994 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X76, 0X78, 0X69, 0X78, 0X8  
 7,   //1995 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //1996 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //1997 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //1998 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //1999 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2000 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2001 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //2002 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //2003 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2004 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2005 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2006 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8  
 7,   //2007 
 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8  
 6,   //2008 
 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2009 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2010 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8  
 7,   //2011 
 0X96, 0XB4, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8  
 6,   //2012 
 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2013 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2014 
 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //2015 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8  
 6,   //2016 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2017 
 0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2018 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //2019 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X8  
 6,   //2020 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2021 
 0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2022 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8  
 7,   //2023 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9  
 6,   //2024 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2025 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2026 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //2027 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9  
 6,   //2028 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2029 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2030 
 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8  
 7,   //2031 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9  
 6,   //2032 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2033 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78, 0X87, 0X8  
 7,   //2034 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2035 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9  
 6,   //2036 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 6,   //2037 
 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2038 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2039 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9  
 6,   //2040 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8  
 6,   //2041 
 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2042 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2043 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88, 0X87, 0X9  
 6,   //2044 
 0XA5, 0XC3, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8  
 6,   //2045 
 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8  
 7,   //2046 
 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8  
 7,   //2047 
 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5, 0X97, 0X87, 0X87, 0X88, 0X86, 0X9  
 6,   //2048 
 0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X8  
 6,   //2049 
 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87, 0X8  
 7    //2050 
 
 }; 
 
 
 
  -- 不是我不明白,计算机这玩意儿变化快
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.97.30.229]
  | 
 
 
 |