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函数里也没有调用这个变量啊?这是为什么呢? 展开
要实现只允许用户输入数字和小数点,需要屏蔽非数字和小数点的字符,屏蔽工作在OnChar消息函数中进行:当按下键盘后,解发WM_CHAR消息,并进入OnChar消息函数,用::isdigit(nChar)验证数字,用nChar == '.'验证小数点,满足其一即调用父类OnChar函数继续处理:CEdit::OnChar(nChar, nRepcnt, nFlag)。
在自学mfc,学到编译一个计算器这里,自定义一个基类是CEdit的子类,然后进入WM_CHAR消息编译OnChar函数,用该函数限制输入数字和小数点。
其他都能明白,就是不明白为什么要在dlg.h的文件里要定义这个新生成类的对象(变量)呢?我试过了,如果把这个变量注释掉,那么在编辑框里面就会随便输入字符和数字,但是在OnChar函数里也没有调用这个变量啊?这是为什么呢? 展开
1个回答
展开全部
OnChar是窗口对象的一个方法,当窗口接收到WM_CHAR消息时用于消息处理。
从CEdit派生一个类,用此类的OnChar来对按键进行处理是最方便的,OnChar 事件是在控件有焦点,并且用户输入时触发,在这个事件中,判断是否是可接收的字符,进行过滤很方便。
如果在对话框中没有定义这个 变量,此控件 在WM_CHAR消息处理时,会使用默认方法处理,而不是调用 用户自已写的 派生类的 OnChar来处理消息了。
//如果不想派生控件,又想过滤,其实也能实现,就是在控件的父窗口PreTranslateMessage 方法中,对消息进行过滤:
如果是WM_KEYDOWN,并且当前窗口是编辑框窗口时,判断按键,有选择的处理。
从CEdit派生一个类,用此类的OnChar来对按键进行处理是最方便的,OnChar 事件是在控件有焦点,并且用户输入时触发,在这个事件中,判断是否是可接收的字符,进行过滤很方便。
如果在对话框中没有定义这个 变量,此控件 在WM_CHAR消息处理时,会使用默认方法处理,而不是调用 用户自已写的 派生类的 OnChar来处理消息了。
//如果不想派生控件,又想过滤,其实也能实现,就是在控件的父窗口PreTranslateMessage 方法中,对消息进行过滤:
如果是WM_KEYDOWN,并且当前窗口是编辑框窗口时,判断按键,有选择的处理。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询