




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厨具安装合同范本
- 中外合资经营合同
- 北京技术合同范本
- 出口合同范本 fob
- 单位投资合作合同范本
- 有机化学模拟考试题+参考答案
- 农艺工高级模拟题及答案
- 工程地质与土力学模拟练习题(附参考答案)
- 印刷承包加工合同范本
- 一年级下语文教案
- 2025年黑龙江交通职业技术学院单招职业技能测试题库必考题
- 个人画协议合同范本
- 2024-2025学年高一下学期开学第一节课(哪吒精神)主题班会课件
- 人教版2025-初中物理实验室实验课程安排
- 2024年无锡科技职业学院高职单招语文历年参考题库含答案解析
- 舞蹈艺术赏析课件
- 2025江苏泰州兴化市陈堡镇村级后备干部招聘10人历年高频重点提升(共500题)附带答案详解
- 2025中冶建工集团限公司校园招聘114人高频重点提升(共500题)附带答案详解
- (完整版)python学习课件
- CNAS-RL01:2019实验室认可规则
- 2025中国人民解放军空军部队军工厂招聘21人管理单位笔试遴选500模拟题附带答案详解
评论
0/150
提交评论