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控件相关推荐

  1. js/input/输入框 只能输入汉字/数字/英文

    输入框 只能输入汉字/数字/英文 需要自取,丢input里即可, 1.输入框只能输入汉字 onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,' ...

  2. MFC框架下自绘CEdit控件

    前提 MFC中的CEdit控件提供了编辑的功能. 该编辑框是一个自创阔举行,用户可以向里面输入任意类型的文本信息. 那么我们该如何优化控件的显示呢?接下来就介绍下如何继承并重绘CEdit控件. 该控件 ...

  3. CEdit 控件 更新内容的 方法(可以自动滚动至末尾)

    CEdit 控件更新内容大概有如下几种方法: 1.关联CString变量.先改变CString变量的值,然后调用UpDateData(FALSE)来更新控件.如果需要滚动至末尾一行,可以调用 [cpp ...

  4. VC用MFC开发的圆形进度条控件

    DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条.有的用来显示导弹 ...

  5. 关于CEdit控件的透明

    前几天和风在这里讨论关于CEdit控件的透明问题.主要的目的就是要做一个有图形背景的Edit控件,经过一番努,终于做出了一个还算象样的Edit控件. 做一个透明的Edit控件的主要问题是字符的输出,在 ...

  6. 身份证input输入框限制,只能输入纯数字及限制长度

    需求:只能输入18位纯数字,并且输入其他字符时删除其他字符 1.<input type="number"> 还是可以输入e和e-,不符合 2.<input typ ...

  7. 限制input 输入框只能输入纯数字/数字/中文/英文

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  8. VC设置CEdit控件背景透明、文字背景也透明

    开发环境:VC6, a dialog based MFC application. 主界面: 为对话框添加WM_CTLCOLOR消息响应函数: HBRUSH CDDlg::OnCtlColor(CDC ...

  9. VC下自制一个MusicPlayer:调用activemovie控件

    步骤如下: 1.打开vc6.0,用AppWizard新建一个project(是exe那个) 2.选择"基于对话框"(第三个选项) 3.一路确定,进入下面的界面:你可以拖动各种控件了 ...

最新文章

  1. 一道让你拍案叫绝的算法题
  2. Redis史上最强【集群】入门实践教程
  3. 转 awk 使用方法
  4. DOM0,DOM2,DOM3事件,事件基础知识入门
  5. Jmeter分布式压测方案
  6. 从案例角度解析建模平台动态规则引擎
  7. CCNA-第八篇-OSPF-上
  8. arcgis python实例_ArcGIS Python编程案例(14)-五个常用Python处理任务
  9. GIS人眼中的“云GIS”
  10. idea maven +spring mvc
  11. arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
  12. ASP.NET 對cookies的操作
  13. 【原创】Magisk Root隐藏模块 Shamiko安装
  14. 图像scale与相机参数_Blender 的相机参数解析
  15. Wox插件之程序员不安装会死系列
  16. 【年度总结】继往开来:回首不靠谱的2021,希冀靠谱的2022
  17. 试验设计——序贯设计
  18. MAT400安全帽标签
  19. Nginx学习心得总结第一章
  20. bulk这个词的用法_bulk是什么意思_bulk的翻译_音标_读音_用法_例句_爱词霸在线词典...

热门文章

  1. 重磅!GroupFace 人脸识别,刷新 9 个数据集SOTA
  2. 【项目合作】最高50万元!道路缝隙检测、目标跟踪优化、机器人平台开发
  3. 令人拍案叫绝的EfficientNet和EfficientDet
  4. 重磅!ICCV 2019 COCO + Mapillary 联合识别挑战赛开启!
  5. DataFountain新上计算机视觉比赛-20万巨奖数钢筋
  6. python爬虫实战教程分享 或许你可以看一下这篇文章
  7. 怎么用Python获取全网最全的杰尼龟表情包
  8. mysql 插入毫秒数据_【转载】怎样在mybatis里向mysql中插入毫秒数的时间?
  9. 论文速递 | 华为开源自研算法Disout | 中科院计算所GCN中文综述
  10. 到底什么是“机器学习”?机器学习有哪些基本概念?(简单易懂)