MFC EDIT 回车事件响应之 OnChar() 实现

2 篇文章 0 订阅

                 MFC EDIT  回车事件响应之 OnChar() 实现


最近,维护一个年久失修的项目,源程序使用VC++6.0开发的,由于时间太久远,开发文档全无,要命的是涉及到硬件的控制部分,用户要求修改更新OS系统,增加新功能。

新功能部分,要求实现键盘触发事件,这个功能用MFC实现。我需要温习一下,查阅相关资料,发现不同程度的出现BUG,于是找度娘,做法五花八门,但我不满意,经过思考和多次尝试后,实现了,经过测试,目前还很稳定,分享出来,希望对大家有所帮助。

一、创建项目

在VS2008创建MFC项目,安装向导创建“MFC_EDIT_OnChar”,如下:

二、添加EDit

在对话框中添加三个 edit ,ID使用默认即可。如下图:


三、对话框添加事件

1.添加虚方法PreTranslateMessage,并重写此方法。

  资源视图—-Dialog—-指定界面—-类向导—-虚函数—-PreTranslateMessage 

下一步,选择需要添加此方法的类,单击右键选择属性,打开如下图:

下一步,单击“重写”按钮,

如图

找到PreTranslateMessage方法,添加即可。

2. 添加WM_CHAR事件

 资源视图—-Dialog—-指定界面 ,如图:

   选择“消息”按钮,添加WM_CHAR函数。

PreTranslateMessage方法和WM_CHAR函数添加完成。

四、编写代码

1、PreTranslateMessage方法下面写面代码:

SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
        return 0;

SendMessage函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。

在这里的目的是把消息转到OnChar事件,并由OnChar事件处理。

1、OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)下面添加如下代码:

HWND hwnd = ::GetFocus();//获取焦点控件
     int my_ID = ::GetDlgCtrlID(hwnd);
     CString aaa;
    if(nChar==13){
        if(my_ID==IDC_EDIT1)
        {
            UpdateData(TRUE);
            GetDlgItem(my_ID)->GetWindowText(aaa);
            GetDlgItem(IDC_STATIC)->SetWindowTextW(aaa);
            UpdateData(FALSE);
        }
        else if(my_ID==IDC_EDIT2)
        {
            UpdateData(TRUE);
            GetDlgItem(my_ID)->GetWindowText(aaa);
            GetDlgItem(IDC_STATIC)->SetWindowTextW(aaa);
            UpdateData(FALSE);
        }
        else if(my_ID==IDC_EDIT3)
        {
            UpdateData(TRUE);
            GetDlgItem(my_ID)->GetWindowText(aaa);
            GetDlgItem(IDC_STATIC)->SetWindowTextW(aaa);
            UpdateData(FALSE);
        }
        GetNextDlgTabItem(GetFocus())->SetFocus();
    }

代码添加完成。

五、测试

 


      经过多次测试,比较稳定。

六、总结

通过这种方式,在EDIT控件中输入字符后按“ENTER”,后实现EDIT分别响应ENTER事件,经测试使用扫描枪输入也很稳定,但扫描枪输入字符必须有“回车符”。

本文的代码是经过实际测试的,测试环境Win10+VS2008。分享出来,希望能帮助大家,少走弯路,也欢迎拍砖。HAHA。

代码下载:https://download.csdn.net/download/whoami119/12685826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值