FloatEdit.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #include "stdafx.h"
  22. #include "floatedit.h"
  23. // CFloatEdit
  24. IMPLEMENT_DYNAMIC(CFloatEdit, CEdit)
  25. bool CFloatEdit::GetFloat(float& f)
  26. {
  27. CString s;
  28. GetWindowText(s);
  29. return(_stscanf(s, _T("%f"), &f) == 1);
  30. }
  31. double CFloatEdit::operator = (double d)
  32. {
  33. CString s;
  34. s.Format(_T("%.4f"), d);
  35. SetWindowText(s);
  36. return(d);
  37. }
  38. CFloatEdit::operator double()
  39. {
  40. CString s;
  41. GetWindowText(s);
  42. float f;
  43. return(_stscanf(s, _T("%f"), &f) == 1 ? f : 0);
  44. }
  45. BEGIN_MESSAGE_MAP(CFloatEdit, CEdit)
  46. ON_WM_CHAR()
  47. END_MESSAGE_MAP()
  48. void CFloatEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  49. {
  50. if(!(nChar >= '0' && nChar <= '9' || nChar == '.' || nChar == 'b'))
  51. return;
  52. CString str;
  53. GetWindowText(str);
  54. if(nChar == '.' && (str.Find('.') >= 0 || str.IsEmpty()))
  55. return;
  56. int nStartChar, nEndChar;
  57. GetSel(nStartChar, nEndChar);
  58. if(nChar == 'b' && nStartChar <= 0)
  59. return;
  60. CEdit::OnChar(nChar, nRepCnt, nFlags);
  61. }
  62. // CIntEdit
  63. IMPLEMENT_DYNAMIC(CIntEdit, CEdit)
  64. BEGIN_MESSAGE_MAP(CIntEdit, CEdit)
  65. ON_WM_CHAR()
  66. END_MESSAGE_MAP()
  67. void CIntEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  68. {
  69. if(!(nChar >= '0' && nChar <= '9' || nChar == '-' || nChar == 'b'))
  70. return;
  71. CString str;
  72. GetWindowText(str);
  73. if(nChar == '-' && !str.IsEmpty() && str[0] == '-')
  74. return;
  75. int nStartChar, nEndChar;
  76. GetSel(nStartChar, nEndChar);
  77. if(nChar == 'b' && nStartChar <= 0)
  78. return;
  79. if(nChar == '-' && (nStartChar != 0 || nEndChar != 0))
  80. return;
  81. CEdit::OnChar(nChar, nRepCnt, nFlags);
  82. }
  83. // CHexEdit
  84. IMPLEMENT_DYNAMIC(CHexEdit, CEdit)
  85. bool CHexEdit::GetDWORD(DWORD& dw)
  86. {
  87. CString s;
  88. GetWindowText(s);
  89. return(_stscanf(s, _T("%x"), &dw) == 1);
  90. }
  91. DWORD CHexEdit::operator = (DWORD dw)
  92. {
  93. CString s;
  94. s.Format(_T("%08x"), dw);
  95. SetWindowText(s);
  96. return(dw);
  97. }
  98. CHexEdit::operator DWORD()
  99. {
  100. CString s;
  101. GetWindowText(s);
  102. DWORD dw;
  103. return(_stscanf(s, _T("%x"), &dw) == 1 ? dw : 0);
  104. }
  105. BEGIN_MESSAGE_MAP(CHexEdit, CEdit)
  106. ON_WM_CHAR()
  107. END_MESSAGE_MAP()
  108. void CHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
  109. {
  110. if(!(nChar >= 'A' && nChar <= 'F' || nChar >= 'a' && nChar <= 'f'
  111. || nChar >= '0' && nChar <= '9' || nChar == 'b'))
  112. return;
  113. CString str;
  114. GetWindowText(str);
  115. int nStartChar, nEndChar;
  116. GetSel(nStartChar, nEndChar);
  117. if(nChar == 'b' && nStartChar <= 0)
  118. return;
  119. if(nChar != 'b' && nEndChar - nStartChar == 0 && str.GetLength() >= 8)
  120. return;
  121. CEdit::OnChar(nChar, nRepCnt, nFlags);
  122. }