VC限制只能输入常规数字的CEdit控件
MFC提供的CEdit控件,可以设置其属性为NUM,也就是限定只能输入数字,但是,有个问题就是小数点没法输入了。
在订单系统编写的时候,我想限制价钱和重量的输入只能是数字,整数或者浮点数。因为都是正数,所以我就没有考虑负号的因素,有兴趣的可以加上这一功能。
所以,只能自己编写一个数字的CEdit控件,过程:
1.从标准CEdit控件派生出CNumEdit控件
2.重载CEdit的OnChar函数,实现输入字符的限制,只能是小数点和数字,不过还得考虑响应退格键。其次,还得考虑小数点的输入次数,只能为一个
void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default CString ss; char ch = char(nChar); GetWindowText(ss); // 获得当前已输入的字符序列 // 对当前输入字符进行判断 if(!isdigit(ch)) // 如果不是数字 { if(ch == '.') // 是小数点 { if(ss.Find('.') != -1) // 检查是否已经输入了小数点 return; } else // 不是小数点 { if(ch == '/b') // 是退格键 { ; } else // 不是退格键,则退出 return; } } CEdit::OnChar(nChar, nRepCnt, nFlags); }
3.在输入结束后,模仿CEdit的数字规范化的功能,也就是类似0011-->11、11.100 ->11.1 .1100->0.11
重载CEdit的OnKillFocus函数,在编辑框失去焦点的时候进行规范化
void CNumEdit::OnKillFocus(CWnd* pNewWnd) { CEdit::OnKillFocus(pNewWnd); // TODO: Add your message handler code here GetWindowText(m_sValue); int i; char ch; int nLen = m_sValue.GetLength(); if(nLen == 0) return; ch = m_sValue[0]; for(i = 0; i < nLen; i++) { if(m_sValue[i] != '0') // 直到第一个不是0的字符 break; } if(i < nLen) // 不是全 0 的情况 { m_sValue = m_sValue.Mid(i); // 将第一个非 0 字符前面的 0 去掉 nLen = m_sValue.GetLength(); int nDotPos = m_sValue.Find('.'); if(nDotPos != -1) // 含有小数点 { for(i = nLen - 1; i >= 0; i--) { if(m_sValue[i] != '0') break; } m_sValue = m_sValue.Left(i + 1); // 去掉了小数后面的0 } nLen = m_sValue.GetLength(); if(nDotPos == nLen - 1) // 小数点在最后 { m_sValue = m_sValue.Left(nLen - 1); } if(nDotPos == 0) // 小数点在最开始 m_sValue = "0" + m_sValue; } else // 全 0 { m_sValue = '0'; } SetSel(0, -1); ReplaceSel(m_sValue); }
//使用方法 //在你的对话框中添加变量: //prvate: //CMyEdit m_Edit; //在对话框的OnInitDialog()初始化! // BOOL CAboutDlg::OnInitDialog() //{ // ... // //控件的子类型化 // m_Edit.SubclassDlgItem(IDC_YOUR_EDIT,this); // .... //} //-------------- // 别忘了包含相应的头文件!
转载于:https://www.cnblogs.com/wqvbjhc/archive/2010/09/16/2465144.html
VC限制只能输入常规数字的CEdit控件相关推荐
- js/input/输入框 只能输入汉字/数字/英文
输入框 只能输入汉字/数字/英文 需要自取,丢input里即可, 1.输入框只能输入汉字 onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,' ...
- MFC框架下自绘CEdit控件
前提 MFC中的CEdit控件提供了编辑的功能. 该编辑框是一个自创阔举行,用户可以向里面输入任意类型的文本信息. 那么我们该如何优化控件的显示呢?接下来就介绍下如何继承并重绘CEdit控件. 该控件 ...
- CEdit 控件 更新内容的 方法(可以自动滚动至末尾)
CEdit 控件更新内容大概有如下几种方法: 1.关联CString变量.先改变CString变量的值,然后调用UpDateData(FALSE)来更新控件.如果需要滚动至末尾一行,可以调用 [cpp ...
- VC用MFC开发的圆形进度条控件
DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条.有的用来显示导弹 ...
- 关于CEdit控件的透明
前几天和风在这里讨论关于CEdit控件的透明问题.主要的目的就是要做一个有图形背景的Edit控件,经过一番努,终于做出了一个还算象样的Edit控件. 做一个透明的Edit控件的主要问题是字符的输出,在 ...
- 身份证input输入框限制,只能输入纯数字及限制长度
需求:只能输入18位纯数字,并且输入其他字符时删除其他字符 1.<input type="number"> 还是可以输入e和e-,不符合 2.<input typ ...
- 限制input 输入框只能输入纯数字/数字/中文/英文
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- VC设置CEdit控件背景透明、文字背景也透明
开发环境:VC6, a dialog based MFC application. 主界面: 为对话框添加WM_CTLCOLOR消息响应函数: HBRUSH CDDlg::OnCtlColor(CDC ...
- VC下自制一个MusicPlayer:调用activemovie控件
步骤如下: 1.打开vc6.0,用AppWizard新建一个project(是exe那个) 2.选择"基于对话框"(第三个选项) 3.一路确定,进入下面的界面:你可以拖动各种控件了 ...
最新文章
- 一道让你拍案叫绝的算法题
- Redis史上最强【集群】入门实践教程
- 转 awk 使用方法
- DOM0,DOM2,DOM3事件,事件基础知识入门
- Jmeter分布式压测方案
- 从案例角度解析建模平台动态规则引擎
- CCNA-第八篇-OSPF-上
- arcgis python实例_ArcGIS Python编程案例(14)-五个常用Python处理任务
- GIS人眼中的“云GIS”
- idea maven +spring mvc
- arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
- ASP.NET 對cookies的操作
- 【原创】Magisk Root隐藏模块 Shamiko安装
- 图像scale与相机参数_Blender 的相机参数解析
- Wox插件之程序员不安装会死系列
- 【年度总结】继往开来:回首不靠谱的2021,希冀靠谱的2022
- 试验设计——序贯设计
- MAT400安全帽标签
- Nginx学习心得总结第一章
- bulk这个词的用法_bulk是什么意思_bulk的翻译_音标_读音_用法_例句_爱词霸在线词典...
热门文章
- 重磅!GroupFace 人脸识别,刷新 9 个数据集SOTA
- 【项目合作】最高50万元!道路缝隙检测、目标跟踪优化、机器人平台开发
- 令人拍案叫绝的EfficientNet和EfficientDet
- 重磅!ICCV 2019 COCO + Mapillary 联合识别挑战赛开启!
- DataFountain新上计算机视觉比赛-20万巨奖数钢筋
- python爬虫实战教程分享 或许你可以看一下这篇文章
- 怎么用Python获取全网最全的杰尼龟表情包
- mysql 插入毫秒数据_【转载】怎样在mybatis里向mysql中插入毫秒数的时间?
- 论文速递 | 华为开源自研算法Disout | 中科院计算所GCN中文综述
- 到底什么是“机器学习”?机器学习有哪些基本概念?(简单易懂)