【VC++开源代码栏目提醒】:网学会员鉴于大家对VC++开源代码十分关注,论文会员在此为大家搜集整理了“【精品】VC-文本框只能输入数字和小数 源文件 - 其它资料”一文,供大家参考学习
VC-文本框只能输入数字和小数 源文件include stdafx.hinclude NumberEdit.hCNumberEdit::CNumberEdit m_iAfterDotLen 2 m_str _T0CNumberEdit::CNumberEditBEGIN_MESSAGE_MAPCNumberEdit CEdit //AFX_MSG_MAPCNumberEdit ON_WM_CHAR ON_CONTROL_REFLECTEN_KILLFOCUS OnKillfocus //AFX_MSG_MAPEND_MESSAGE_MAPvoid CNumberEdit::OnCharUINT nChar UINT nRepCnt UINT nFlags // 修改消息响应ifnChar 8 //退格 CEdit::OnCharnChar nRepCnt nFlags returnBOOL bChange FALSEGetWindowTextm_strifCheckNumbernCharnRepCntnFlags //检查输入为数字 bChange TRUEelse ifCheckOneMinusnCharnRepCntnFlags //检查只有一个负号且只能是第一个字符 bChange TRUEelse ifCheckOneDotnCharnRepCntnFlags //检查只有一个小数点 bChange TRUE ifbChange CEdit::OnCharnChar nRepCnt nFlags void CNumberEdit::OnKillfocus // 修改消息响应 //失去焦点时,小数按设置的小数点后数据长度补齐 GetWindowTextm_str ifm_str.IsEmpty //未输入数据则设为 0 m_str 0 else ifm_str.GetLength 1 m_str0 TCHAR- //只输入了一个负号 m_str 0 else int iDotPos m_str.FindTCHAR. ifiDotPos 0 //小数点后已有位数 int iLen m_str.GetLength - 1 - iDotPos ifiLen m_iAfterDotLen //已有位数超过设定 return if iLen 0 //小数点后没有数据则用 0 补齐 m_str0 SetWindowTextm_strBOOL CNumberEdit::CheckNumberUINT nCharUINT nRepCntUINTnFlags if::isdigitnChar0 //是否数字 return FALSE //小数点位置 int iDotPos m_str.FindTCHAR. ifiDotPos 0 //小数据点后数据长度 int iLen m_str.GetLength - 1 - iDotPos if GetCaretXPos iDotPos iLen m_iAfterDotLen //超过设置的长度 return FALSE return TRUEBOOL CNumberEdit::CheckOneMinusUINT nCharUINT nRepCntUINTnFlags ifnChar - //不是- return FALSE ifGetCaretXPos 0 //不在第一个位置 return FALSE ifm_str.IsEmpty m_str.GetAt0 TCHAR- return FALSE return TRUEBOOL CNumberEdit::CheckOneDotUINT nCharUINT nRepCntUINTnFlags if m_iAfterDotLen 0 //小数点后不加数据限制为整数 return FALSE ifnChar . //不是小数点 return FALSE ifm_str.FindTCHAR. 0 //已有小数点 return FALSE int iPos GetCaretXPos ifiPos 0 //第一个字符就是小数点! return FALSE else ifiPos1 m_str0 TCHAR- //第一个字符是-第二个是小数点 return FALSE return TRUEint CNumberEdit::GetCaretXPos CPoint p GetCaretPos return p.x - p.y/6double CNumberEdit::GetDouble GetWindowTextm_str return atofm_strlong CNumberEdit::GetLong GetWindowTextm_str return atolm_strvoid CNumberEdit::SetWindowText CString str m_str str char nChar UINT nRepCnt 0 UINT nFlags 0 BOOL bChange FALSE for int nstr 0nstr str.GetLength - 1nstr //取得字符 nChar str.GetAtnstr ifCheckNumbernCharnRepCntnFlags CheckOneMinusnCharnRepCntnFlags CheckOneDotnCharnRepCntnFlags //检查初始化文本数据 bChange TRUE ifbChange int iDotPos m_str.FindTCHAR. ifiDotPos 0 //小数点后已有位数 int iLen m_str.GetLength - 1 - iDotPos if iLen 0 //小数点后没有数据则用 0 补齐 m_str0 CEdit::SetWindowTextm_str void CMVSpinEdit::OnEditUpdate CString csAreaS m_edit.GetWindowText csAreaS // 只允许输数据 int nStringLength csAreaS.GetLength int nDotCount 0 int nFloatNum -1 // 点字符不能多于1个 for int nIndex 0 nIndex nStringLength nIndex ifnFloatNum 0 //小数点位数 nFloatNum if csAreaS nIndex . nFloatNum 0 nDotCount if nDotCount 1 m_nFloatNum 0 CString csTmp csTmp csAreaS.Left nIndex csTmp csAreaS.Right csAreaS.GetLength -nIndex - 1 m_edit.SetWindowText csTmp m_edit.SetSelcsTmp.GetLength-1TRUE return ifnFloatNum m_nFloatNum CString csTmp csTmp csAreaS.Left nIndex m_edit.SetWindowText csTmp m_edit.SetSelcsTmp.GetLength-1TRUE return // 不允许输入数字和点以外的字符 for int nIndex 0 nIndex nStringLength nIndex if csAreaS nIndex . csAreaS nIndex 9 csAreaS nIndex 0 csAreaS csAreaS.Left nIndex csAreaS.Right csAreaS.GetLength - nIndex - 1 m_edit.SetWindowText csAreaS m_edit.SetSelcsAreaS.GetLength-1TRUE return