MFC中,调用OnChar函数,为什么一定要定义一个以CEdit为基类的变量呢?

在编写MFC应用程序过程中,需要对原有的CEdit作功能上的扩展,新生成的类CEditEx继承于CEdit,只允许用户输入数字和小数点。要实现只允许用户输入数字和小数点,... 在编写MFC应用程序过程中,需要对原有的CEdit作功能上的扩展,新生成的类CEditEx继承于CEdit,只允许用户输入数字和小数点。
要实现只允许用户输入数字和小数点,需要屏蔽非数字和小数点的字符,屏蔽工作在OnChar消息函数中进行:当按下键盘后,解发WM_CHAR消息,并进入OnChar消息函数,用::isdigit(nChar)验证数字,用nChar == '.'验证小数点,满足其一即调用父类OnChar函数继续处理:CEdit::OnChar(nChar, nRepcnt, nFlag)。

在自学mfc,学到编译一个计算器这里,自定义一个基类是CEdit的子类,然后进入WM_CHAR消息编译OnChar函数,用该函数限制输入数字和小数点。
其他都能明白,就是不明白为什么要在dlg.h的文件里要定义这个新生成类的对象(变量)呢?我试过了,如果把这个变量注释掉,那么在编辑框里面就会随便输入字符和数字,但是在OnChar函数里也没有调用这个变量啊?这是为什么呢?
展开
 我来答
bignode
2015-01-08 · TA获得超过2664个赞
知道大有可为答主
回答量:1427
采纳率:75%
帮助的人:540万
展开全部
OnChar是窗口对象的一个方法,当窗口接收到WM_CHAR消息时用于消息处理。
从CEdit派生一个类,用此类的OnChar来对按键进行处理是最方便的,OnChar 事件是在控件有焦点,并且用户输入时触发,在这个事件中,判断是否是可接收的字符,进行过滤很方便。
如果在对话框中没有定义这个 变量,此控件 在WM_CHAR消息处理时,会使用默认方法处理,而不是调用 用户自已写的 派生类的 OnChar来处理消息了。

//如果不想派生控件,又想过滤,其实也能实现,就是在控件的父窗口PreTranslateMessage 方法中,对消息进行过滤:
如果是WM_KEYDOWN,并且当前窗口是编辑框窗口时,判断按键,有选择的处理。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式