Datecal.cpp
上传用户:shlb123
上传日期:2007-01-01
资源大小:73k
文件大小:6k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // DateCal.cpp : implementation file
  2. //written by : Alexei Valyayev 07/05/98
  3. #include "stdafx.h"
  4. #include "TestClnd.h"
  5. #include "datecal.h"
  6. #include "font.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. char* CDateCal::MONTHS[12] = { "January", "February", "March", "April",
  13. "May", "June", "July", "August", 
  14. "September", "October", "November", "December" };
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CDateCal dialog
  17. CDateCal::CDateCal(CWnd* pParent /*=NULL*/)
  18. : CDialog(CDateCal::IDD, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CDateCal)
  21. //}}AFX_DATA_INIT
  22. }
  23. void CDateCal::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CDateCal)
  27. DDX_Control(pDX, IDC_RESET, m_butReset);
  28. DDX_Control(pDX, IDC_PREV_YEAR, m_butPrevYear);
  29. DDX_Control(pDX, IDC_PREV_MONTH, m_butPrevMonth);
  30. DDX_Control(pDX, IDC_NEXT_YEAR, m_butNextYear);
  31. DDX_Control(pDX, IDC_NEXT_MONTH, m_butNextMonth);
  32. DDX_Control(pDX, IDC_DATE_CALENDAR, m_calDate);
  33. //}}AFX_DATA_MAP
  34. }
  35. BEGIN_MESSAGE_MAP(CDateCal, CDialog)
  36. //{{AFX_MSG_MAP(CDateCal)
  37. ON_BN_CLICKED(IDC_PREV_YEAR, OnPrevYear)
  38. ON_BN_CLICKED(IDC_PREV_MONTH, OnPrevMonth)
  39. ON_BN_CLICKED(IDC_RESET, OnReset)
  40. ON_BN_CLICKED(IDC_NEXT_MONTH, OnNextMonth)
  41. ON_BN_CLICKED(IDC_NEXT_YEAR, OnNextYear)
  42. //}}AFX_MSG_MAP
  43. END_MESSAGE_MAP()
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CDateCal message handlers
  46. BOOL CDateCal::OnInitDialog() 
  47. {
  48. CDialog::OnInitDialog();
  49. // TODO: Add extra initialization here
  50. m_calDate.SetYear(m_nYear);
  51. m_calDate.SetMonth(m_nMonth);
  52. m_calDate.SetDay(m_nDay);
  53. m_hIcon = AfxGetApp()->LoadIcon(IDI_TODAY);
  54. if (NULL != m_hIcon){
  55. m_butReset.ModifyStyle(0, BS_ICON);
  56. m_butReset.SetIcon(m_hIcon);
  57. }
  58.     else
  59. m_hIcon = NULL;
  60. m_hIcon = AfxGetApp()->LoadIcon(IDI_PREVYEAR);
  61. if (NULL != m_hIcon){
  62. m_butPrevYear.ModifyStyle(0, BS_ICON);
  63. m_butPrevYear.SetIcon(m_hIcon);
  64. }
  65.     else
  66.         m_hIcon = NULL;
  67. m_hIcon = AfxGetApp()->LoadIcon(IDI_PREVMONTH);
  68. if (NULL != m_hIcon){
  69. m_butPrevMonth.ModifyStyle(0, BS_ICON);
  70. m_butPrevMonth.SetIcon(m_hIcon);
  71. }
  72.     else
  73. m_hIcon = NULL;
  74. m_hIcon = AfxGetApp()->LoadIcon(IDI_NEXTMONTH);
  75. if (NULL != m_hIcon){
  76. m_butNextMonth.ModifyStyle(0, BS_ICON);
  77. m_butNextMonth.SetIcon(m_hIcon);
  78. }
  79. else
  80.         m_hIcon = NULL;
  81. m_hIcon = AfxGetApp()->LoadIcon(IDI_NEXTYEAR);
  82. if (NULL != m_hIcon){
  83. m_butNextYear.ModifyStyle(0, BS_ICON);
  84. m_butNextYear.SetIcon(m_hIcon);
  85. }
  86. else
  87. m_hIcon = NULL;
  88. return TRUE;  // return TRUE unless you set the focus to a control
  89.               // EXCEPTION: OCX Property Pages should return FALSE
  90. }
  91. void CDateCal::OnOK() 
  92. {
  93. // TODO: Add extra validation here
  94. m_nDay = m_calDate.GetDay();
  95. m_nMonth = m_calDate.GetMonth();
  96. m_nYear = m_calDate.GetYear();
  97. CDialog::OnOK();
  98. }
  99. void CDateCal::OnPrevYear() 
  100. {
  101. // TODO: Add your control notification handler code here
  102. m_calDate.PreviousYear();
  103. }
  104. void CDateCal::OnPrevMonth() 
  105. {
  106. // TODO: Add your control notification handler code here
  107. m_calDate.PreviousMonth();
  108. }
  109. void CDateCal::OnReset() 
  110. {
  111. // TODO: Add your control notification handler code here
  112. m_calDate.Today();
  113. }
  114. void CDateCal::OnNextMonth() 
  115. {
  116. // TODO: Add your control notification handler code here
  117. m_calDate.NextMonth();
  118. }
  119. void CDateCal::OnNextYear() 
  120. {
  121. // TODO: Add your control notification handler code here
  122. m_calDate.NextYear();
  123. }
  124. BEGIN_EVENTSINK_MAP(CDateCal, CDialog)
  125.     //{{AFX_EVENTSINK_MAP(CDateCal)
  126. ON_EVENT(CDateCal, IDC_DATE_CALENDAR, 4 /* NewYear */, OnNewYearDateCalendar, VTS_NONE)
  127. ON_EVENT(CDateCal, IDC_DATE_CALENDAR, 3 /* NewMonth */, OnNewMonthDateCalendar, VTS_NONE)
  128. ON_EVENT(CDateCal, IDC_DATE_CALENDAR, 2 /* BeforeUpdate */, OnBeforeUpdateDateCalendar, VTS_PI2)
  129. //}}AFX_EVENTSINK_MAP
  130. END_EVENTSINK_MAP()
  131. void CDateCal::OnBeforeUpdateDateCalendar(short FAR* Cancel) 
  132. {
  133. // TODO: Add your control notification handler code here
  134. m_nDay = m_calDate.GetDay();
  135. m_nMonth = m_calDate.GetMonth();
  136. m_nYear = m_calDate.GetYear();
  137. Cancel;//not used
  138. }
  139. ///////////////////////////////////////////////
  140. // change month by combobox
  141. void CDateCal::OnNewMonthDateCalendar() 
  142. {
  143. // TODO: Add your control notification handler code here
  144. int nID;
  145. CWnd* pWnd = GetFocus();
  146. nID = pWnd->GetDlgCtrlID();
  147. CString string;
  148. pWnd->GetWindowText( string );
  149. if(1==nID){//nID =1 - Month ID combobox 
  150. int nDif =  GetNewMonth(string); 
  151. if(nDif) {//if change month
  152. nDif-=m_nMonth;
  153. if(nDif>0){//change month in a calendar
  154. while(nDif--)
  155. OnNextMonth();
  156. }
  157. else if (nDif<0){
  158. while(nDif++)
  159. OnPrevMonth();
  160. }
  161. }
  162. }
  163. }
  164. /////////////////////////////////////////////////////////
  165. //
  166. void CDateCal::OnNewYearDateCalendar() 
  167. {
  168. // TODO: Add your control notification handler code here
  169. int nID;
  170. CWnd* pWnd = GetFocus();
  171. nID = pWnd->GetDlgCtrlID();
  172. CString string;
  173. pWnd->GetWindowText( string );
  174. if(2==nID){//nID =2 - ID combobox Year 
  175. int nDif = atoi(string) - m_nYear;
  176. if(nDif>0){//if increase Year
  177. while(nDif--)
  178. OnNextYear();//change year
  179. }
  180. else if (nDif<0){//if decrease Year
  181. while(nDif++)
  182. OnPrevYear();//change Year in a calendar
  183. }
  184. }
  185. }
  186. ////////////////////////////////////////////////////////
  187. // difference between values of a month in calendar 
  188. //and a month in a combobox 
  189. int CDateCal::GetNewMonth(const CString& string ) const
  190. {
  191. char** strptr;
  192. strptr = MONTHS;
  193. for(int j = 0; j< 12;j++)
  194. if(!string.Compare(*(strptr++)))
  195. return j+1;
  196. return 0;//error or not changed month
  197. }