Calendar1.h
上传用户:desheng311
上传日期:2007-01-08
资源大小:47k
文件大小:5k
源码类别:

其他小程序

开发平台:

Visual C++

  1. /***************************************************************************
  2.    致看到这些源代码的兄弟:
  3.        你好!
  4.        这本来是我为一个商业PDA产品开发的日历程序,最近移植于PC机上, 所以算法
  5.    和数据部分是用纯C++写的,不涉及MFC,所有的代码都是以短节省存储空间为主要目
  6.    的.
  7.    很高兴你对这些代码有兴趣,你可以随意复制和使用些代码,唯一有一点小小的
  8.    愿望:在你使用和复制给别人时,别忘注明这些代码作者:-)。程序代码也就罢了,后
  9.    面的数据可是我辛辛苦苦从万年历上找出来输进去的。
  10.    如果你有什么好的意见不妨Mail给我。
  11.        wangfei@hanwang.com.cn
  12.    或
  13.    wangfei@engineer.com.cn
  14.                                                                  2000年3月
  15. ****************************************************************************/
  16. #if !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__INCLUDED_)
  17. #define AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__INCLUDED_
  18. #if _MSC_VER > 1000
  19. #pragma once
  20. #endif // _MSC_VER > 1000
  21. // Calendar1.h : header file
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CCalendar window
  24. extern const WORD START_YEAR;
  25. extern const WORD END_YEAR;
  26. //define user message select changed
  27. #define UM_SELCHANGE  (WM_USER+101)
  28. class CCalendar : public CWnd
  29. {
  30. private:
  31. WORD    m_iYear, m_iMonth, m_iDay;
  32. CBitmap m_oBitMapList[42];
  33. CMenu   m_oPopMenu;
  34. public:
  35. COLORREF m_dwBackColor,  m_dwForeColor;
  36. COLORREF m_dwSelColor,   m_dwSelForeColor;
  37. COLORREF m_dwTitleBkColor, m_dwTitleColor;
  38. public:
  39. CCalendar(WORD iYear, WORD iMonth, WORD iDay);
  40. CCalendar();
  41. virtual BOOL Create(RECT &rect, CWnd * pParentWnd, UINT nID);
  42. public:
  43. WORD GetYear(){return m_iYear;}
  44. WORD GetMonth(){return m_iMonth;}
  45. WORD GetDay(){return m_iDay;}
  46. void GetDate(WORD &iYear, WORD &iMonth, WORD &iDay);
  47. BOOL SetDate(WORD iYear, WORD iMonth, WORD iDay);
  48. protected:
  49. CButton m_obutToday;
  50. //{{AFX_MSG(CCalendar)
  51. afx_msg void OnPaint();
  52. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  53. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  54. //}}AFX_MSG
  55. afx_msg void OnTitleBkColor();
  56. afx_msg void OnTitleColor();
  57. afx_msg void OnSelColor();
  58. afx_msg void OnForeColor();
  59. DECLARE_MESSAGE_MAP()
  60. public:
  61. //判断iYear是不是闰年
  62.     static BOOL IsLeapYear(WORD iYear)
  63. {return !(iYear%4)&&(iYear%100) || !(iYear%400);}
  64. //计算iYear,iMonth,iDay对应是星期几 1年1月1日 --- 65535年12月31日
  65. static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay);
  66. //返回iYear年iMonth月的天数 1年1月 --- 65535年12月
  67. static WORD MonthDays(WORD iYear, WORD iMonth);
  68. //返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,
  69. //高字为第二个iLunarMonth月的天数,否则高字为0 
  70. // 1901年1月---2050年12月
  71. static LONG LunarMonthDays(WORD iLunarYear, WORD iLunarMonth);
  72. //返回阴历iLunarYear年的总天数
  73. // 1901年1月---2050年12月
  74. static WORD LunarYearDays(WORD iLunarYear);
  75. //返回阴历iLunarYear年的闰月月份,如没有返回0
  76. // 1901年1月---2050年12月
  77. static WORD GetLeapMonth(WORD iLunarYear);
  78. //把iYear年格式化成天干记年法表示的字符串
  79. static void FormatLunarYear(WORD  iYear, char *pBuffer);
  80. //把iMonth格式化成中文字符串
  81. static void FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar = TRUE);
  82.     //把iDay格式化成中文字符串
  83. static void FormatLunarDay(WORD  iDay, char *pBuffer);
  84. //计算公历两个日期间相差的天数  1年1月1日 --- 65535年12月31日
  85. static LONG CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndDay,
  86.                      WORD iStartYear = START_YEAR, 
  87.  WORD iStartMonth =1, WORD iStartDay =1);
  88. //计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24
  89. //1901年1月1日---2050年12月31日
  90. static WORD GetLunarDate(WORD iYear, WORD iMonth, WORD iDay,
  91.                      WORD &iLunarYear, WORD &iLunarMonth, WORD &iLunarDay);
  92. public:
  93. virtual ~CCalendar();
  94. private:
  95. void   l_InitData();
  96. //计算从1901年1月1日过iSpanDays天后的阴历日期
  97. static void   l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay, LONG iSpanDays);
  98.     //计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气
  99. static WORD   l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay);
  100. WORD l_CalcSelectDay(POINT * pt);
  101. void l_PaintTitle(CPaintDC &dc);
  102. void l_PaintDate(CPaintDC &dc);
  103. inline void l_PaintOneDay(CPaintDC &dc, CDC &imgdc, WORD &iDay, 
  104.                         WORD &iLunarYear,
  105.                         WORD &iLunarMonth, WORD &iLuanrDay, 
  106. LONG startx, LONG starty);
  107. };
  108. /////////////////////////////////////////////////////////////////////////////
  109. //{{AFX_INSERT_LOCATION}}
  110. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  111. #endif // !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__INCLUDED_)