MFC控件edit封装,只能输入数字、负号、小数点
来源:互联网 发布:防护骷髅面具淘宝 编辑:程序博客网 时间:2024/05/17 12:48
修改属性、或者只简单过滤字符串不怎么好用,重新封装的MFC edit控件,可以根据自己的需求继续优化封装。具体看代码:
功能介绍:
1、只能响应输入数字、负号、小数点。以及backspace键。
2、只能输入一个负号、小数点。
3、小数点不能在负号后面。
4、负号只能够在第一位输入。。
5、可设置输入的长度(包括负号和小数点)
NumberEdit.h
/************************************************************************** * @Copyright (c) 2016, QGM, All rights reserved. * @file : NumberEdit.h* @version : ver 1.0* @author : 小光* @date : 2016/12/8 16:01:23* @describe : 对edit控件进行了封装优化,只能够输入数字正负浮点数* @modify : 无**************************************************************************/ #pragma once// CNumberEditclass CNumberEdit : public CEdit{DECLARE_DYNAMIC(CNumberEdit)public:CNumberEdit();virtual ~CNumberEdit();protected:DECLARE_MESSAGE_MAP()virtual BOOL PreTranslateMessage(MSG* pMsg);/** * @describe: 用于判断当前Edit文本中是否包含某个字符* @param[in]: nChar 要检查的字符* @return: BOOL TRUE:已存在; FALSE:不存在*/BOOL CheckUnique(char nChar);private:int m_countNum ;//保存输入的数字长度 不包括负号和小数点int m_precision;//限制输入的数字长度,包括-和小数点public:/** * @describe: 设置输入长度(包括负号、小数点)* @param[in]: Precision输入长度* @return: 无*/void SetPrecision(int precision);};
// NumberEdit.cpp : implementation file//#include "stdafx.h"#include "NumberEdit.h"// CNumberEditIMPLEMENT_DYNAMIC(CNumberEdit, CEdit)CNumberEdit::CNumberEdit(){//默认精度可以输入6个字符,包括 - 和 .m_precision = 6;}CNumberEdit::~CNumberEdit(){}BEGIN_MESSAGE_MAP(CNumberEdit, CEdit)END_MESSAGE_MAP()// CNumberEdit message handlersBOOL CNumberEdit::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classCString str;int nPos = 0;if (pMsg->message == WM_KEYDOWN){//截获 Delete按键 ,不允许用此键删除if (46 == pMsg->wParam){return TRUE;}}if( pMsg->message == WM_CHAR ){//获取当前输入前已经输入的数字字符个数GetWindowText(str);nPos = str.GetLength();//如果小于等于0则刚开始没有字符if(nPos <= 0){m_countNum = 0;}//获取光标上次的位置int curPosion = LOWORD(GetSel());int startChar = 0;int endChar = 0;GetSel(startChar,endChar);//获取选中的字符位置int deleteNum = endChar - startChar;//Backspace键及Delete键if((8==pMsg->wParam) || (127==pMsg->wParam)){//如果光标不在首位置,而且在字符长度大于1,则可以按backspace键if (8==pMsg->wParam && curPosion!=0 && nPos>1){if (deleteNum!=0){m_countNum = m_countNum - deleteNum;}else{m_countNum --;}return FALSE;}//无法在此获得delete键消息//如果光标不在最后,且按下delete键时,后面有字符可以按Delete键 ,//if (127==pMsg->wParam && curPosion!=nPos && curPosion<nPos)//{//if (deleteNum!=0)//{//m_countNum = m_countNum - deleteNum;//}//else//{//m_countNum --;//}//return FALSE;//}//其他情况直接returnreturn FALSE;}//Enturn键if(pMsg->wParam == VK_RETURN){GetFocus()->UpdateData(TRUE);return FALSE;//为母窗口保留处理,主要为焦点设置}//只允许输入一个小数点if((46 == pMsg->wParam) && CheckUnique(46)){return TRUE;}//当前字符是’.’ 及 当前光标在第一位及当前还没有’-’,才可以输入-if((46 == pMsg->wParam) && !CheckUnique(46)){if(curPosion == 0 || curPosion== m_precision){return TRUE;}if(CheckUnique(45) && curPosion ==1)//小数点不允许在负号后面{return TRUE;}return CEdit::PreTranslateMessage(pMsg);; //则接受这个消息,实现输入’.’}//只允许输入一个’-’if(((45 == pMsg->wParam) && CheckUnique(45))){return TRUE; }//当前字符是’-’ 及 当前光标在第一位及当前还没有’-’,才可以输入-if((45 == pMsg->wParam) && !CheckUnique(45)){if (curPosion!=0)//光标不在第一位则不能输入 -{return TRUE;}return CEdit::PreTranslateMessage(pMsg); //则接受这个消息,实现输入’-’}//只允许输入负号,数字,点号。其它不处理直接返回if(45 != pMsg->wParam && !(pMsg->wParam >= 48 && pMsg->wParam <= 57) && 46 != pMsg->wParam ){return TRUE;}//只能输入6个字符包括(- .)if(nPos >= m_precision){return TRUE;}//只能连续输入多少个数字if(pMsg->wParam >= 48 && pMsg->wParam <= 57){m_countNum ++;}}return CEdit::PreTranslateMessage(pMsg);}BOOL CNumberEdit::CheckUnique(char nChar){CString str;int nPos = 0;GetWindowText(str);nPos = str.Find(nChar);return (nPos >=0 )?TRUE:FALSE;}void CNumberEdit::SetPrecision(int precision){m_precision = precision;}
1 0
- MFC控件edit封装,只能输入数字、负号、小数点
- MFC 如何让CEdit控件只能输入数字、正负号、小数点(浮点数)
- 限制TEdit控件只能输入数字,小数点和负号
- mfc现实edit控件输入限制(只能输入数字和小数点)
- edit中只能输入数字、小数点(只可以1个小数点)和负号+多个edit共用一个事件
- edit中只能输入数字、小数点(只可以1个小数点)和负号+多个edit共用一个事件
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC 如何实现edit框内只能输入数字包括负号
- 输入框中只能输入数字,小数点,负号
- JS只能输入数字一个小数点可输入负号
- 在EditBox中只能输入数字包括小数点和负号
- 限制只能输入数字、负号、小数点。支持退格删除
- edit中只能输入数字并且只能输入一个小数点
- Delphi 让Edit控件只能输入数字
- 限制CEdit(Edit Contrl)只能输入数字和小数点
- 限制CEdit(Edit Contrl)只能输入数字和小数点
- svn的使用
- 编写jQueryUI插件(widget)
- Yarn的组成部分
- redis.conf 配置详解
- Hydra的介绍
- MFC控件edit封装,只能输入数字、负号、小数点
- boost库之字符串与文本处理——lexical_cast
- 常用 Java 静态代码分析工具的分析与比较
- ExpandableListView--可展开的列表组件
- 3.1手写数字识别:MNIST,Perceptron
- Linux电源驱动-Linux Cpuidle Framework
- Head First设计模式——1、设计模式入门
- 【快速傅立叶变换fft&数论变换ntt学习小记】
- CCS加载mathlib的解决办法