MFC实现Edit输入限制(只允许输入数字,负号和小数点)
2018-01-31 15:43
726 查看
1)添加个C++类 eg. class Dot:public CEdit
2)给这个类添加onChar()消息
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
3)*.cpp中
void Dot::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
// 保证小数点最多只能出现一次
if(nChar==’.’)
{
CString str;
// 获取原来编辑框中的字符串
GetWindowText(str);
//若原来的字符串中已经有一个小数点,则不将小数点输入,保证了最多只能输入一个小数点
if(str.Find(‘.’)!=-1)
{
}
// 否则就输入这个小数点
else
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
// 保证负号只能出现一次,并且只能出现在第一个字符
else if(nChar==’-‘)
{
CString str;
GetWindowText(str);
// 还没有输入任何字符串
if(str.IsEmpty())
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
int nSource,nDestination;
GetSel(nSource,nDestination);
// 此时选择了全部的内容
if(nSource==0&&nDestination==str.GetLength())
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
}
}
}
// 除了小数点和负号,还允许输入数字,Backspace,Delete
else if((nChar>=’0’ && nChar<=’9’)||(nChar==0x08)||(nChar==0x10))
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
// 其它的键,都不响应
else
{
}
}
4)在*Dlg.h加上
—-》#include”Dot.h”
—-》Dot m_s;
5)在*Dlg.cpp加上
—–》DDX_Control(pDX, IDC_EDIT1, m_s);
或者
[cpp] view plain copy print?BOOL CWeiXinQ::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
//指定对话框只接受数字按键输入,其他符号输入无效
//获取控件窗口指针
CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1_Q_MONEY);
CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2_Q_CODE);
if( (GetFocus() == pEdit1 ||GetFocus() == pEdit2) && (pMsg->message == WM_CHAR) )
{
//只允许输入数字和小数点“.”
if((pMsg->wParam <= ‘9’ && pMsg->wParam >= ‘0’) || pMsg->wParam == ‘.’)
{
//金额输入框只允许输入一个小数点
if(pMsg->wParam == ‘.’)
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1_Q_MONEY, str); // 获取edit中文本
nPos = str.Find(’.’); // 查找.的位置
if(nPos >= 0)
{
return 1;
}
}
return 0;
}
4000
else if(pMsg->wParam == 0x08 || pMsg->wParam == 0x10) //接受Backspace和delete键
{
return 0;
}
else
{
//响应标签页切换的快捷键
switch(pMsg->wParam)
{
case ‘q’:
case ‘Q’:
case ‘w’:
case ‘W’:
case ‘e’:
case ‘E’:
case ‘r’:
case ‘R’:
case ‘t’:
case ‘T’:
case ‘y’:
case ‘Y’:
case ‘u’:
case ‘U’:
case ‘i’:
case ‘I’:
case ‘o’:
case ‘O’:
CWnd *pParent = GetParent();
pParent->SetFocus();
}
return 1;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
2)给这个类添加onChar()消息
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
3)*.cpp中
void Dot::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
// 保证小数点最多只能出现一次
if(nChar==’.’)
{
CString str;
// 获取原来编辑框中的字符串
GetWindowText(str);
//若原来的字符串中已经有一个小数点,则不将小数点输入,保证了最多只能输入一个小数点
if(str.Find(‘.’)!=-1)
{
}
// 否则就输入这个小数点
else
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
// 保证负号只能出现一次,并且只能出现在第一个字符
else if(nChar==’-‘)
{
CString str;
GetWindowText(str);
// 还没有输入任何字符串
if(str.IsEmpty())
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
int nSource,nDestination;
GetSel(nSource,nDestination);
// 此时选择了全部的内容
if(nSource==0&&nDestination==str.GetLength())
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
}
}
}
// 除了小数点和负号,还允许输入数字,Backspace,Delete
else if((nChar>=’0’ && nChar<=’9’)||(nChar==0x08)||(nChar==0x10))
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
// 其它的键,都不响应
else
{
}
}
4)在*Dlg.h加上
—-》#include”Dot.h”
—-》Dot m_s;
5)在*Dlg.cpp加上
—–》DDX_Control(pDX, IDC_EDIT1, m_s);
或者
[cpp] view plain copy print?BOOL CWeiXinQ::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
//指定对话框只接受数字按键输入,其他符号输入无效
//获取控件窗口指针
CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1_Q_MONEY);
CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2_Q_CODE);
if( (GetFocus() == pEdit1 ||GetFocus() == pEdit2) && (pMsg->message == WM_CHAR) )
{
//只允许输入数字和小数点“.”
if((pMsg->wParam <= ‘9’ && pMsg->wParam >= ‘0’) || pMsg->wParam == ‘.’)
{
//金额输入框只允许输入一个小数点
if(pMsg->wParam == ‘.’)
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1_Q_MONEY, str); // 获取edit中文本
nPos = str.Find(’.’); // 查找.的位置
if(nPos >= 0)
{
return 1;
}
}
return 0;
}
4000
else if(pMsg->wParam == 0x08 || pMsg->wParam == 0x10) //接受Backspace和delete键
{
return 0;
}
else
{
//响应标签页切换的快捷键
switch(pMsg->wParam)
{
case ‘q’:
case ‘Q’:
case ‘w’:
case ‘W’:
case ‘e’:
case ‘E’:
case ‘r’:
case ‘R’:
case ‘t’:
case ‘T’:
case ‘y’:
case ‘Y’:
case ‘u’:
case ‘U’:
case ‘i’:
case ‘I’:
case ‘o’:
case ‘O’:
CWnd *pParent = GetParent();
pParent->SetFocus();
}
return 1;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
BOOL CWeiXinQ::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 //指定对话框只接受数字按键输入,其他符号输入无效 //获取控件窗口指针 CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1_Q_MONEY); CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2_Q_CODE); if( (GetFocus() == pEdit1 ||GetFocus() == pEdit2) && (pMsg->message == WM_CHAR) ) { //只允许输入数字和小数点“.” if((pMsg->wParam <= '9' && pMsg->wParam >= '0') || pMsg->wParam == '.') { //金额输入框只允许输入一个小数点 if(pMsg->wParam == '.') { CString str; int nPos = 0; GetDlgItemText(IDC_EDIT1_Q_MONEY, str); // 获取edit中文本 nPos = str.Find('.'); // 查找.的位置 if(nPos >= 0) { return 1; } } return 0; } else if(pMsg->wParam == 0x08 || pMsg->wParam == 0x10) //接受Backspace和delete键 { return 0; } else { //响应标签页切换的快捷键 switch(pMsg->wParam) { case 'q': case 'Q': case 'w': case 'W': case 'e': case 'E': case 'r': case 'R': case 't': case 'T': case 'y': case 'Y': case 'u': case 'U': case 'i': case 'I': case 'o': case 'O': CWnd *pParent = GetParent(); pParent->SetFocus(); } return 1; } } return CDialogEx::PreTranslateMessage(pMsg); }
相关文章推荐
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC实现Edit输入限制(只允许输入数字,负号和小数点)
- MFC实现Edit输入限制(只允许输入数字,小数点)
- MFC 如何实现edit框内只能输入数字包括负号
- mfc现实edit控件输入限制(只能输入数字和小数点)
- MFC控件edit封装,只能输入数字、负号、小数点
- js实现文本框只允许输入数字并限制数字大小的方法
- jQuery实现只允许输入数字和小数点的方法
- android edittext 限制小数点后最多只能输入两位数字
- 限制只能输入数字、负号、小数点。支持退格删除
- js实现文本框只允许输入数字并限制数字大小的方法
- 执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.
- 保持字符串小数点后两位和EditText输入框中输入的数字的长度限制
- 封装的EditText的输入限制(输入的数字前+¥,精确到小数点后两位)
- js实现文本框限制输入数字和小数点--兼容多个浏览器
- 怎样限制Edit只能输入数字(包括有小数点的数字)
- edit中只能输入数字、小数点(只可以1个小数点)和负号+多个edit共用一个事件
- 限制TEdit控件只能输入数字,小数点和负号
- 输入框只允许输入数字并且限制小数点位数