DATETIME.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // DateTime.cpp : implementation file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #include "stdafx.h"
  13. #include "RESOURCE.H"
  14. #include "DateTime.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CDateTimePage property page
  22. IMPLEMENT_DYNCREATE(CDateTimePage, CPropertyPage)
  23. CDateTimePage::CDateTimePage() : CPropertyPage(CDateTimePage::IDD)
  24. {
  25. //{{AFX_DATA_INIT(CDateTimePage)
  26. m_bAppCanParse = FALSE;
  27. m_bShowNone = FALSE;
  28. m_bUpDown = FALSE;
  29. //}}AFX_DATA_INIT
  30. m_psp.dwFlags &= ~PSP_HASHELP;  // Lose the Help button
  31. }
  32. CDateTimePage::~CDateTimePage()
  33. {
  34. }
  35. void CDateTimePage::DoDataExchange(CDataExchange* pDX)
  36. {
  37. CPropertyPage::DoDataExchange(pDX);
  38. //{{AFX_DATA_MAP(CDateTimePage)
  39. DDX_Check(pDX, IDC_CKAPPCANPARSE, m_bAppCanParse);
  40. DDX_Check(pDX, IDC_CKSHOWNONE, m_bShowNone);
  41. DDX_Check(pDX, IDC_CKUPDOWN, m_bUpDown);
  42. //}}AFX_DATA_MAP
  43. DDX_Control(pDX,IDC_LBNOTIFY,m_lbNotifyList);
  44. }
  45. BEGIN_MESSAGE_MAP(CDateTimePage, CPropertyPage)
  46. //{{AFX_MSG_MAP(CDateTimePage)
  47. ON_BN_CLICKED(IDC_CKUPDOWN, OnCkupdown)
  48. ON_BN_CLICKED(IDC_CKTIMEFORMAT, OnCktimeformat)
  49. ON_BN_CLICKED(IDC_CKSHORTDATEFORMAT, OnCkshortdateformat)
  50. ON_BN_CLICKED(IDC_CKSHOWNONE, OnCkshownone)
  51. ON_BN_CLICKED(IDC_CKLONGDATEFORMAT, OnCklongdateformat)
  52. ON_BN_CLICKED(IDC_CKAPPCANPARSE, OnCkappcanparse)
  53. //}}AFX_MSG_MAP
  54. ON_NOTIFY(DTN_CLOSEUP,IDC_DATETIME, OnDTNotify)
  55. ON_NOTIFY(DTN_DATETIMECHANGE,IDC_DATETIME, OnDTNotify)
  56. ON_NOTIFY(DTN_DROPDOWN ,IDC_DATETIME, OnDTNotify)
  57. ON_NOTIFY(DTN_FORMAT,IDC_DATETIME, OnDTNotify)
  58. ON_NOTIFY(DTN_FORMATQUERY,IDC_DATETIME, OnDTNotify)
  59. ON_NOTIFY(DTN_USERSTRING,IDC_DATETIME, OnDTNotify)
  60. ON_NOTIFY(DTN_WMKEYDOWN ,IDC_DATETIME, OnDTNotify)
  61. END_MESSAGE_MAP()
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CDateTimePage message handlers
  64. BOOL CDateTimePage::OnInitDialog()
  65. {
  66. CPropertyPage::OnInitDialog();
  67. CWnd *pWnd = GetDlgItem(IDC_DTFRAME);
  68. CRect rc;
  69. if(!pWnd) return TRUE;
  70. pWnd->GetWindowRect(rc);
  71. pWnd->DestroyWindow(); //pWnd was just a placeholder;
  72. ScreenToClient(rc);
  73. m_DateTime.Create(WS_CHILD|WS_VISIBLE|DTS_SHORTDATEFORMAT,rc,this,IDC_DATETIME);
  74. m_nPrevStyle=DTS_SHORTDATEFORMAT;
  75. SetCheck(IDC_CKSHORTDATEFORMAT);
  76. return TRUE;
  77. }
  78. void CDateTimePage::OnCkupdown()
  79. {
  80. UpdateData(TRUE);
  81. if(m_bUpDown)
  82. {
  83. CRect rc;
  84. m_DateTime.GetWindowRect(rc);
  85. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  86. lStyle |= DTS_UPDOWN;
  87. m_DateTime.DestroyWindow();
  88. ScreenToClient(rc);
  89. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  90. }
  91. else
  92. {
  93. CRect rc;
  94. m_DateTime.GetWindowRect(rc);
  95. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  96. lStyle &= ~DTS_UPDOWN;
  97. m_DateTime.DestroyWindow();
  98. ScreenToClient(rc);
  99. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  100. }
  101. }
  102. void CDateTimePage::OnCkshownone()
  103. {
  104. UpdateData(TRUE);
  105. if(m_bShowNone)
  106. {
  107. CRect rc;
  108. m_DateTime.GetWindowRect(rc);
  109. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  110. lStyle |= DTS_SHOWNONE;
  111. m_DateTime.DestroyWindow();
  112. ScreenToClient(rc);
  113. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  114. }
  115. else
  116. {
  117. CRect rc;
  118. m_DateTime.GetWindowRect(rc);
  119. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  120. lStyle &= ~DTS_SHOWNONE;
  121. m_DateTime.DestroyWindow();
  122. ScreenToClient(rc);
  123. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  124. }
  125. }
  126. void CDateTimePage::OnCkappcanparse()
  127. {
  128. UpdateData(TRUE);
  129. if(m_bAppCanParse)
  130. {
  131. CRect rc;
  132. m_DateTime.GetWindowRect(rc);
  133. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  134. lStyle |= DTS_APPCANPARSE;
  135. m_DateTime.DestroyWindow();
  136. ScreenToClient(rc);
  137. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  138. }
  139. else
  140. {
  141. CRect rc;
  142. m_DateTime.GetWindowRect(rc);
  143. long lStyle = ::GetWindowLong(m_DateTime.m_hWnd,GWL_STYLE);
  144. lStyle &= ~DTS_APPCANPARSE;
  145. m_DateTime.DestroyWindow();
  146. ScreenToClient(rc);
  147. m_DateTime.Create(lStyle,rc,this,IDC_DATETIME);
  148. }
  149. }
  150. void CDateTimePage::OnCkshortdateformat()
  151. {
  152. SetCheck(IDC_CKSHORTDATEFORMAT);
  153. //remove previous format style
  154. m_DateTime.ModifyStyle(m_nPrevStyle,0);
  155. //set this style
  156. m_DateTime.ModifyStyle(0,DTS_SHORTDATEFORMAT,SWP_NOSIZE);
  157. m_nPrevStyle=DTS_SHORTDATEFORMAT;
  158. }
  159. void CDateTimePage::OnCklongdateformat()
  160. {
  161. SetCheck(IDC_CKLONGDATEFORMAT);
  162. //remove previous format style
  163. m_DateTime.ModifyStyle(m_nPrevStyle,0);
  164. //set this style
  165. m_DateTime.ModifyStyle(0,DTS_LONGDATEFORMAT,SWP_NOSIZE);
  166. m_nPrevStyle=DTS_LONGDATEFORMAT;
  167. }
  168. void CDateTimePage::OnCktimeformat()
  169. {
  170. SetCheck(IDC_CKTIMEFORMAT);
  171. //remove previous format style
  172. m_DateTime.ModifyStyle(m_nPrevStyle,0);
  173. //set this style
  174. m_DateTime.ModifyStyle(0,DTS_TIMEFORMAT,SWP_NOSIZE);
  175. m_nPrevStyle=DTS_TIMEFORMAT;
  176. }
  177. void CDateTimePage::SetCheck(UINT idBtn)
  178. {
  179. static UINT buttons []={IDC_CKTIMEFORMAT,IDC_CKLONGDATEFORMAT,IDC_CKSHORTDATEFORMAT};
  180. CButton *pBtn=NULL;
  181. for(int i=0;i<3;i++)
  182. {
  183. pBtn = (CButton*)GetDlgItem(buttons[i]);
  184. if(!pBtn) continue;
  185. if(buttons[i]==idBtn)
  186. pBtn->SetCheck(1);
  187. else
  188. pBtn->SetCheck(0);
  189. }
  190. }
  191. void CDateTimePage::OnDTNotify(NMHDR *pHdr, LRESULT * pRes)
  192. {
  193. switch( pHdr->code)
  194. {
  195. case DTN_CLOSEUP:
  196. m_lbNotifyList.AddString(_T("DTN_CLOSEUP"));
  197. break;
  198. case DTN_DATETIMECHANGE:
  199. m_lbNotifyList.AddString(_T("DTN_DATETIMECHANGE"));
  200. break;
  201. case DTN_DROPDOWN:
  202. m_lbNotifyList.AddString(_T("DTN_DROPDOWN"));
  203. break;
  204. case DTN_FORMAT:
  205. m_lbNotifyList.AddString(_T("DTN_FORMAT"));
  206. break;
  207. case DTN_FORMATQUERY:
  208. m_lbNotifyList.AddString(_T("DTN_FORMATQUERY"));
  209. break;
  210. case DTN_USERSTRING:
  211. m_lbNotifyList.AddString(_T("DTN_USERSTRING"));
  212. break;
  213. case DTN_WMKEYDOWN:
  214. m_lbNotifyList.AddString(_T("DTN_WMKEYDOWN"));
  215. break;
  216. }
  217. }