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

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


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

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

一、创建项目

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

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

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

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

二、添加EDit

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

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


三、对话框添加事件

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

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

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

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

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

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

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

如图

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

找到PreTranslateMessage方法,添加即可。

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

2. 添加WM_CHAR事件

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

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

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

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

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

四、编写代码

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

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

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

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();
    }

代码添加完成。

五、测试

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

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

 

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


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

六、总结

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

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

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