如何控制text框输入的字符?假如我的text框内只准输入0-9数字、a-f(或A-F),其余均不能输入,我该怎么写代码?

mfcdeclare 2003-12-18 02:00:18
如何控制text框输入的字符?假如我的text框内只准输入0-9数字、a-f(或A-F),其余均不能输入,我该怎么写代码?
...全文
39 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
simouse 2003-12-18
  • 打赏
  • 举报
回复
看错了,继承CEdit类,相应WM_CHAR
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if((nChar>='0'&&nChar<='9')||
(nChar>='a'&&nChar<='f')||
(nChar>='A'&&nChar<='F'))
CEdit::OnChar(nChar, nRepCnt, nFlags);

}
bluebohe 2003-12-18
  • 打赏
  • 举报
回复
不明白这有什么麻烦的,你看一下这些代码是否符合你的要求
void CTestDlgDlg::OnChangeEdit1()
{

char str2[3]={0,0,0};
CString text;
GetDlgItem(IDC_EDIT1)->GetWindowText(text);
int iStart=HIWORD(((CEdit*)GetDlgItem(IDC_EDIT1))->GetSel());
if(iStart!=0)
{
if(!((text[iStart-1]>='0'&&text[iStart-1]<='9')||((text[iStart-1]>='a'&&text[iStart-1]<='f'))||
((text[iStart-1]>='A'&&text[iStart-1]<='F'))))
{
str2[0]=text[iStart-1];
BOOL bDB=FALSE;
if(text[iStart-1]<0)
{
str2[1]=str2[0];
str2[0]=text[iStart-2];
bDB=TRUE;
}
text.Replace(str2,"");
GetDlgItem(IDC_EDIT1)->SetWindowText(text);
if(bDB)
{
((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(iStart-2,iStart-2,-1);
}else
{
((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(iStart-1,iStart-1,-1);
}
}
}
}
0sch 2003-12-18
  • 打赏
  • 举报
回复
映射编辑框的WM_CHANGE消息,对每一个输入的字符进行判断,如果是你想要的,就UpdateData(TRUE),否则,UpdateData(FALSE),也就实现了你想要的不允许输入这种字符
mfcdeclare 2003-12-18
  • 打赏
  • 举报
回复
比较麻烦,而且
我的要求是不仅能输入0-9,而且能输入a-f;
simouse 2003-12-18
  • 打赏
  • 举报
回复
对话框的话,可以把test框的Number选成true
modena 2003-12-18
  • 打赏
  • 举报
回复
EN_UPDATE
bluebohe 2003-12-18
  • 打赏
  • 举报
回复
这个是限制输入0-9','的,你的要比这个简单
void CTestDlgDlg::OnChangeEdit1()
{
static char *str=",";
char str2[3]={0,0,0};
CString text;
GetDlgItem(IDC_EDIT1)->GetWindowText(text);
int iStart=HIWORD(((CEdit*)GetDlgItem(IDC_EDIT1))->GetSel());
if(iStart!=0)
{
if(!((text[iStart-1]>='0'&&text[iStart-1]<='9')||(text[iStart-2]==str[0]&&text[iStart-1]==str[1])))
{
str2[0]=text[iStart-1];
BOOL bDB=FALSE;
if(text[iStart-1]<0)
{
str2[1]=str2[0];
str2[0]=text[iStart-2];
bDB=TRUE;
}
text.Replace(str2,"");
GetDlgItem(IDC_EDIT1)->SetWindowText(text);
if(bDB)
{
((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(iStart-2,iStart-2,-1);
}else
{
((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(iStart-1,iStart-1,-1);
}
}
}
}
yifengling0 2003-12-18
  • 打赏
  • 举报
回复
子类话,在重写PreTranlateMessage函数。。

判断键值,相应处理。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧