VC++ CEdit控件如何限制只允许输入汉字和数字?请详细指出变量类型和所用方法,谢谢了!

VC++ CEdit控件如何限制只允许输入汉字和数字?请详细指出变量类型和所用方法,谢谢了!

CEdit类是从CWnd类继承的,在CWnd类里面,有一个方法OnChar(),当用户输入字符时该方法会被调用,你可以重写这个方法,判断字符自否为你想要的类型,如果不是直接返回就行了,否则直接调用基类的OnChar方法就行了。

我写了一个MyEdit类继承于Edit,并重写了OnChar方法,你在代码中将控件的类型改为MyEdit即可完成数字和汉字的过滤,经测试可用,如有不懂可以追问。

void MyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 if(nChar <= '9' && nChar >= '0')//数字
      CEdit::OnChar(nChar, nRepCnt, nFlags);
 if(nChar >=0x4E00 && nChar <= 0x9FFF)//常用字
      CEdit::OnChar(nChar, nRepCnt, nFlags);
 if(nChar >=0x3400 && nChar <= 0x4dff)//少用字
      CEdit::OnChar(nChar, nRepCnt, nFlags);
 if(nChar >=0x20000 && nChar <= 0x2A6DF)//少用字,历史上使用
      CEdit::OnChar(nChar, nRepCnt, nFlags);
 return;
}

追问

谢谢你,已加载类和方法,新手想具体问下你是说将控件的类型改为CMyEdit,是说的类名吗?还是添加CMyEdit类型的控制变量呢?(这里显然没有修改类名,开始不懂)

应该是添加CMyEdit类型的控制变量。然后,用CMyEdit下的Control类型的变量就行哈,怎么我的编辑框还是可以输入@#¥%呢?


追答

首先你自己写个继承于CEdit的类CMyEdit,实现OnChar方法(看你好像已经写了)。然后按照常规步骤添加控件变量到该控件的父类CSERCHSTS2Dlg中,类型为CEdit,最后在CSERCHSTS2Dlg.h中将该控件变量的类型修改为CMyEdit,当然别忘了包含CMyEdit.h头文件。MFC ClassWizard不能添加自定义的控件类型,必须手动修改。
当所有的工作做完后,你在CMyEdit类的OnChar方法弄个断点,如果在控件中输入字符时程序被中断说明你的工作正确完成了。

追问

OnChar()应该是自动调用的吧?试了不对,我已经按那个添加了变量,自动出来的CMyEdit改变,且包含了CMyEdit.h头文件。但结果是输入还是没有在CMyEdit类的OnChar方法断点上中断,且仍可以输入#¥%&

追答

如果没有在CMyEdit类中OnChar方法中断说明没有设置好。
在CSERCHSTS2Dlg.h中声明为 CMyEdit myedit1
CSERCHSTS2Dlg.cpp中DoDataExchange中加入DDX_Control(pDx , IDC_EDIT1 , myedit1)
注意不是DDX_Text。如果还不行,你把CSERCHSTS2Dlg该类上传上来。

追问

最后没采用这个东西了。。依然谢谢~

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网