XTMaskEdit.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTMaskEdit.cpp : implementation of the CXTMaskEdit class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Common/XTPVC80Helpers.h"  // Visual Studio 2005 helper functions
  22. #include "XTGlobal.h"
  23. #include "XTMaskEdit.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CXTMaskEdit
  31. /////////////////////////////////////////////////////////////////////////////
  32. CXTMaskEdit::CXTMaskEdit()
  33. {
  34. }
  35. IMPLEMENT_DYNAMIC(CXTMaskEdit, CEdit)
  36. BEGIN_MESSAGE_MAP(CXTMaskEdit, CEdit)
  37. ON_MASKEDIT_REFLECT()
  38. END_MESSAGE_MAP()
  39. BOOL CXTMaskEdit::SetEditMask(LPCTSTR lpszMask, LPCTSTR lpszLiteral, LPCTSTR lpszDefault /*= NULL*/)
  40. {
  41. return CXTMaskEditT<CEdit>::SetEditMask(lpszMask, lpszLiteral, lpszDefault);
  42. }
  43. bool CXTMaskEdit::Initialize(CWnd* /*pParentWnd*/)
  44. {
  45. SetFont(&XTAuxData().font);
  46. return true;
  47. }
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CXTDateEdit class
  50. /////////////////////////////////////////////////////////////////////////////
  51. CXTDateEdit::CXTDateEdit()
  52. {
  53. m_bUseMask = true;
  54. m_strMask = _T("00/00/0000");
  55. m_strLiteral = _T("__/__/____");
  56. m_strDefault = _T("00/00/0000");
  57. }
  58. COleDateTime CXTDateEdit::ReadOleDateTime(LPCTSTR lpszData)
  59. {
  60. COleDateTime dt;
  61. dt.ParseDateTime(lpszData);
  62. return dt;
  63. }
  64. IMPLEMENT_DYNAMIC(CXTDateEdit, CXTMaskEdit)
  65. void CXTDateEdit::FormatOleDateTime(CString &strData, COleDateTime dt)
  66. {
  67. strData = dt.Format(_T("%d/%m/%Y"));
  68. }
  69. void CXTDateEdit::SetDateTime(COleDateTime& dt)
  70. {
  71. CString strText;
  72. FormatOleDateTime(strText, dt);
  73. m_strWindowText = m_strDefault = strText;
  74. SetWindowText(strText);
  75. }
  76. void CXTDateEdit::SetDateTime(LPCTSTR strDate)
  77. {
  78. m_strWindowText = m_strDefault = strDate;
  79. SetWindowText(strDate);
  80. }
  81. COleDateTime CXTDateEdit::GetDateTime()
  82. {
  83. CString strText;
  84. GetWindowText(strText);
  85. return ReadOleDateTime(strText);
  86. }
  87. CString CXTDateEdit::GetWindowDateTime()
  88. {
  89. CString strText;
  90. GetWindowText(strText);
  91. return strText;
  92. }
  93. BOOL CXTDateEdit::ProcessMask(TCHAR& nChar, int nEndPos)
  94. {
  95. // check the key against the mask
  96. if (m_strMask[nEndPos] == _T('0') && _istdigit((TCHAR)nChar))
  97. {
  98. if (nEndPos == 0)
  99. {
  100. if (nChar > '3')
  101. return FALSE;
  102. }
  103. if (nEndPos == 1)
  104. {
  105. if (m_strWindowText.GetAt(0) == _T('3'))
  106. {
  107. if (nChar > _T('1'))
  108. return FALSE;
  109. }
  110. }
  111. if (nEndPos == 3)
  112. {
  113. if (nChar > _T('1'))
  114. return FALSE;
  115. }
  116. if (nEndPos == 4)
  117. {
  118. if (m_strWindowText.GetAt(3) == _T('1'))
  119. {
  120. if (nChar > _T('2'))
  121. return FALSE;
  122. }
  123. }
  124. return TRUE;
  125. }
  126. return FALSE;
  127. }
  128. /////////////////////////////////////////////////////////////////////////////
  129. // CXTTimeEdit class
  130. /////////////////////////////////////////////////////////////////////////////
  131. CXTTimeEdit::CXTTimeEdit()
  132. {
  133. m_bMilitary = false;
  134. m_bUseMask = true;
  135. m_strMask = _T("00:00");
  136. m_strLiteral = _T("__:__");
  137. m_strDefault = _T("00:00");
  138. m_iHours = 0;
  139. m_iMins = 0;
  140. }
  141. IMPLEMENT_DYNAMIC(CXTTimeEdit, CXTDateEdit)
  142. void CXTTimeEdit::FormatOleDateTime(CString &strData, COleDateTime dt)
  143. {
  144. if (dt.m_dt == 0)
  145. {
  146. strData = _T("00:00");
  147. }
  148. else
  149. {
  150. strData = dt.Format(_T("%H:%M"));
  151. }
  152. }
  153. BOOL CXTTimeEdit::ProcessMask(TCHAR& nChar, int nEndPos)
  154. {
  155. // check the key against the mask
  156. if (m_strMask[nEndPos] == _T('0') && _istdigit(nChar))
  157. {
  158. switch (nEndPos)
  159. {
  160. case 0:
  161. if (m_bMilitary)
  162. {
  163. if (nChar > _T('2'))
  164. return FALSE;
  165. }
  166. else
  167. {
  168. if (nChar > _T('1'))
  169. return FALSE;
  170. }
  171. return TRUE;
  172. case 1:
  173. if (m_bMilitary)
  174. {
  175. if (m_strWindowText.GetAt(0) == _T('2'))
  176. {
  177. if (nChar > _T('3'))
  178. return FALSE;
  179. }
  180. }
  181. else
  182. {
  183. if (m_strWindowText.GetAt(0) == _T('1'))
  184. {
  185. if (nChar > _T('2'))
  186. return FALSE;
  187. }
  188. }
  189. return TRUE;
  190. case 3:
  191. if (nChar > _T('5'))
  192. return FALSE;
  193. return TRUE;
  194. case 4:
  195. return TRUE;
  196. }
  197. }
  198. return FALSE;
  199. }
  200. void CXTTimeEdit::SetHours(int nHours)
  201. {
  202. m_iHours = nHours;
  203. CString strText;
  204. strText.Format(_T("%02d:%02d"), m_iHours, m_iMins);
  205. SetWindowText(strText);
  206. }
  207. void CXTTimeEdit::SetMins(int nMins)
  208. {
  209. m_iMins = nMins;
  210. CString strText;
  211. strText.Format(_T("%02d:%02d"), m_iHours, m_iMins);
  212. SetWindowText(strText);
  213. }
  214. void CXTTimeEdit::SetTime(int nHours, int nMins)
  215. {
  216. m_iHours = nHours;
  217. m_iMins = nMins;
  218. CString strText;
  219. strText.Format(_T("%02d:%02d"), m_iHours, m_iMins);
  220. SetWindowText(strText);
  221. }
  222. /////////////////////////////////////////////////////////////////////////////
  223. // DDX_ routines
  224. /////////////////////////////////////////////////////////////////////////////
  225. _XTP_EXT_CLASS void AFXAPI DDX_XTOleDateTime(CDataExchange* pDX, int nIDC, CXTDateEdit& rControl, COleDateTime& rDateTime)
  226. {
  227. DDX_Control(pDX, nIDC, rControl);
  228. if (pDX->m_bSaveAndValidate)
  229. {
  230. rDateTime = rControl.GetDateTime();
  231. }
  232. else
  233. {
  234. rControl.SetDateTime(rDateTime);
  235. }
  236. }