VC-文本框只能输入数字和小数 源文件_第1页
VC-文本框只能输入数字和小数 源文件_第2页
VC-文本框只能输入数字和小数 源文件_第3页
VC-文本框只能输入数字和小数 源文件_第4页
VC-文本框只能输入数字和小数 源文件_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC-文本框只能输入数字和小数 源文件#include "stdafx.h"#include "NumberEdit.h"CNumberEdit:CNumberEdit() m_iAfterDotLen = 2; m_str = _T("0");CNumberEdit:CNumberEdit()BEGIN_MESSAGE_MAP(CNumberEdit, CEdit) /AFX_MSG_MAP(CNumberEdit) ON_WM_CHAR() ON_CONTROL_REFL

2、ECT(EN_KILLFOCUS, OnKillfocus) /AFX_MSG_MAPEND_MESSAGE_MAP()void CNumberEdit:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)  / 修改消息响应 if(nChar = 8)   /退格  CEdit:OnChar(nChar, nRepCnt, nFlags);  return;  BOOL bChange = FALSE; GetWindowTe

3、xt(m_str); if(CheckNumber(nChar,nRepCnt,nFlags)   /检查输入为数字  bChange = TRUE;  else if(CheckOneMinus(nChar,nRepCnt,nFlags)   /检查只有一个负号,且只能是第一个字符  bChange = TRUE;  else if(CheckOneDot(nChar,nRepCnt,nFlags)   /检查只有

4、一个小数点  bChange = TRUE;  if(bChange)   CEdit:OnChar(nChar, nRepCnt, nFlags); void CNumberEdit:OnKillfocus()  / 修改消息响应 /失去焦点时,小数按设置的小数点后数据长度补齐 GetWindowText(m_str); if(m_str.IsEmpty()     /未输入数据则设为0  m_str = &quo

5、t;0"  else if(m_str.GetLength() = 1 && m_str0 = TCHAR('-')   /只输入了一个负号  m_str = "0"  else   int iDotPos = m_str.Find(TCHAR('.');  if(iDotPos <0)     /没有找到小数点 

6、  SetWindowText(m_str);   return;    if(iDotPos >0)     /小数点后已有位数   int iLen = m_str.GetLength() - 1 - iDotPos;   if(iLen >= m_iAfterDotLen)       /已有位数超过设定

7、60;   return;      if (iLen = 0)       /小数点后没有数据则用0补齐    m_str+="0"       SetWindowText(m_str);BOOL CNumberEdit:CheckNumber(UINT nChar,UINT nRepCnt,UINT nF

8、lags) if(:isdigit(nChar)=0)   /是否数字  return FALSE;  /小数点位置 int iDotPos = m_str.Find(TCHAR('.'); if(iDotPos >= 0)   /小数据点后数据长度  int iLen = m_str.GetLength() - 1 - iDotPos;  if( (GetCaretXPos() >= iDotPo

9、s) && (iLen >= m_iAfterDotLen)     /超过设置的长度   return FALSE;    return TRUE;BOOL CNumberEdit:CheckOneMinus(UINT nChar,UINT nRepCnt,UINT nFlags) if(nChar != '-')   /不是'-'  return FALSE;

10、  if(GetCaretXPos() != 0)   /不在第一个位置  return FALSE;  if(!m_str.IsEmpty() && m_str.GetAt(0) = TCHAR('-')   return FALSE;  return TRUE;BOOL CNumberEdit:CheckOneDot(UINT nChar,UINT nRepCnt,UINT nFlags) if (m_iAft

11、erDotLen = 0)   /小数点后不加数据(限制为整数)  return FALSE;  if(nChar != '.')   /不是小数点  return FALSE;  if(m_str.Find(TCHAR('.') >=0)   /已有小数点  return FALSE;  int iPos = GetCaretXPos();

12、0;if(iPos = 0)   /第一个字符就是小数点!  return FALSE;  else if(iPos=1 && m_str0 = TCHAR('-')   /第一个字符是'-',第二个是小数点  return FALSE;  return TRUE;int CNumberEdit:GetCaretXPos() CPoint p = GetCaretPos(); return

13、 (p.x - p.y)/6;double CNumberEdit:GetDouble() GetWindowText(m_str); return atof(m_str);long CNumberEdit:GetLong() GetWindowText(m_str); return atol(m_str);void CNumberEdit:SetWindowText( CString str ) m_str = str; char nChar; UINT nRepCnt = 0; UINT nFlags = 0;

14、 BOOL bChange = FALSE; for (int nstr = 0;nstr < str.GetLength() - 1;+nstr)   /取得字符  nChar = str.GetAt(nstr);  if(!CheckNumber(nChar,nRepCnt,nFlags) && (!CheckOneMinus(nChar,nRepCnt,nFlags)   && (!CheckOneDot(nChar,nRepCnt

15、,nFlags)     /检查初始化文本数据   bChange = TRUE;    if(!bChange)   int iDotPos = m_str.Find(TCHAR('.');  if(iDotPos >0)     /小数点后已有位数   int iLen = m_str.GetLength() - 1 -

16、iDotPos;   if (iLen = 0)       /小数点后没有数据则用0补齐    m_str+="0"       CEdit:SetWindowText(m_str); void CMVSpinEdit:OnEditUpdate()CString csAreaS;m_edit.GetWindowText( csAreaS );/ 只允许输数

17、据int nStringLength = csAreaS.GetLength();int nDotCount = 0;int nFloatNum = -1;/ 点字符不能多于1个for ( int nIndex = 0; nIndex < nStringLength; nIndex+ )if(nFloatNum >= 0)/小数点位数nFloatNum+;if ( csAreaS nIndex = '.' )nFloatNum = 0;nDotCount+;if ( nDotCount > 1 | m_nFloatNum = 0)CString csTmp;c

18、sTmp = csAreaS.Left( nIndex );csTmp += csAreaS.Right( csAreaS.GetLength() - nIndex - 1 );m_edit.SetWindowText( csTmp );m_edit.SetSel(csTmp.GetLength(),-1,TRUE);return;if(nFloatNum > m_nFloatNum)CString csTmp;csTmp = csAreaS.Left( nIndex);m_edit.SetWindowText( csTmp );m_edit.SetSel(csTmp.GetLength(),-1,TRUE);return;/ 不允许输入数字和点以外的字符for ( int nIndex = 0; nIndex < nStringLength; nInde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论