您的位置:首页 > 其它

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);
}
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CEdit
相关文章推荐