用过VC的都知道,VC中的edit控件可以通过属性设置为只允许输入数字,但是只允许输入0-9的数字,不能够输入小数,因此要实现在vc的edit控件中输入小数,需要设置edit控件的属性为文本类型。
接下来我们要做的就是控制edit控件中输入的字符,允许输入的字符为0-9的阿拉伯数字、小数点以及退格,其他的都需要禁止。这个功能实现起来也比较简单,在Dialog类中的PreTranslateMessage函数中对消息进行预处理即可,在vc6.0中可以通过类向导来重载PreTranslateMessage函数,具体参见下图。
具体的修改参加下面的代码,使用下面代码需要保证,对话框中有一个名为IDC_EDIT1的edit控件,而且该控件绑定了一个CEdit类型的变量。下面代码中包括非法字符的过滤以及对小数点进行了判断,只允许一个小数点的存在。
JavaScript语言: 知蚁博客 程序设计
BOOL CDepositCalculatorDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_CHAR // 字符消息
&& (pMsg->hwnd == m_ctlEdit1.m_hWnd) // m_ctlEdit1为与IDC_EDIT1对应的控件变量
)
{
//只允许输入一个小数点
if(pMsg->wParam == ‘.’)
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1, str); // 获取edit中文本
nPos = str.Find(‘.’); // 查找.的位置
if(nPos>=0)
{
return TRUE; // 如果存在. 返回,即不再允许.输入
}
}
{
if( pMsg->message == WM_CHAR // 字符消息
&& (pMsg->hwnd == m_ctlEdit1.m_hWnd) // m_ctlEdit1为与IDC_EDIT1对应的控件变量
)
{
//只允许输入一个小数点
if(pMsg->wParam == ‘.’)
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1, str); // 获取edit中文本
nPos = str.Find(‘.’); // 查找.的位置
if(nPos>=0)
{
return TRUE; // 如果存在. 返回,即不再允许.输入
}
}
//只允许输入. 数字 和退格
if(pMsg->wParam!=‘.’ && (pMsg->wParam>’9′ || pMsg->wParam<’0′) && pMsg->wParam!=‘\b’)
{
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/46
关注你哦,不错,嘿嘿。;-)
多谢支持,常来逛哦~
你好,能解释一下“m_ctlEdit1.m_hWnd”中m_hWnd是怎么获得的吗?谢谢
m_ctlEdit1是一个CEdit类型的变量,该变量其中的一个成员就是m_hWnd,你要做的就是给文本框控件绑定一个CEdit类型的变量。这个我应该有示例程序的,我回去给你找找去。