1. 在编辑框所在对话框类下重构PreTranslateMessage函数:
注意:要通过Class Wizard来重构,自己添加编写会报溢出错误。
2. 在PreTranslateMessage函数中,区分出回车消息,以及区分出各编辑框的回车消息。
2.1 通过pMsg->wParam区分出回车消息:
switch(pMsg->wParam)
{
case VK_RETURN:
case VK_ESCAPE:
return TRUE;
break;
}
2.2 通过pMsg->wParam区分出具体是那个编辑框的回车操作:
// get red gray edit enter key
if ( (pMsg->hwnd) == (GetDlgItem(IDC_EDIT_FPGASETDLG_GRAYRED)->m_hWnd) )
{
......
}
实例参考程序如下,本例为slabHID项目中,FPGASetting对话框,各灰阶编辑框的回车处理操作:
BOOL CFPGASetting::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class switch(pMsg->wParam) { case VK_RETURN: { if ( (pMsg->hwnd) == (GetDlgItem(IDC_EDIT_FPGASETDLG_GRAYRED)->m_hWnd) ) // get red gray edit enter key { fpgagrayflag = GetDlgItemInt(IDC_EDIT_FPGASETDLG_GRAYRED); if ((fpgagrayflag<0)|(fpgagrayflag>255)) AfxMessageBox("The value over range, please fill again"); else { m_cscrollbar_FPGADlg_rgray.SetScrollPos(fpgagrayflag); fpgaPatflag = FPGA_R_PAT; MakeGrayAdjPacket(fpgaPatflag,fpgagrayflag,Write_HID_Buf); flag_FpgaDlgtoMainDlg = FPGADLGSENDDATA; fpgaCallMainMsg(); } } else { if ((pMsg->hwnd) == (GetDlgItem(IDC_EDIT_FPGASETDLG_GRAYGREEN)->m_hWnd)) // get green gray edit enter key { fpgagrayflag = GetDlgItemInt(IDC_EDIT_FPGASETDLG_GRAYGREEN); if ((fpgagrayflag<0)|(fpgagrayflag>255)) AfxMessageBox("The value over range, please fill again"); else { m_cscrollbar_FPGADlg_ggray.SetScrollPos(fpgagrayflag); fpgaPatflag = FPGA_G_PAT; MakeGrayAdjPacket(fpgaPatflag,fpgagrayflag,Write_HID_Buf); flag_FpgaDlgtoMainDlg = FPGADLGSENDDATA; fpgaCallMainMsg(); } } else { if ((pMsg->hwnd) == (GetDlgItem(IDC_EDIT_FPGASETDLG_GRAYBLUE)->m_hWnd)) // get blue gray edit enter key { fpgagrayflag = GetDlgItemInt(IDC_EDIT_FPGASETDLG_GRAYBLUE); if ((fpgagrayflag<0)|(fpgagrayflag>255)) AfxMessageBox("The value over range, please fill again"); else { m_cscrollbar_FPGADlg_bgray.SetScrollPos(fpgagrayflag); fpgaPatflag = FPGA_B_PAT; MakeGrayAdjPacket(fpgaPatflag,fpgagrayflag,Write_HID_Buf); flag_FpgaDlgtoMainDlg = FPGADLGSENDDATA; fpgaCallMainMsg(); } } else { if ((pMsg->hwnd) == (GetDlgItem(IDC_EDIT_FPGASETDLG_GRAYWHITE)->m_hWnd))// get white gray edit enter key { fpgagrayflag = GetDlgItemInt(IDC_EDIT_FPGASETDLG_GRAYWHITE); if ((fpgagrayflag<0)|(fpgagrayflag>255)) AfxMessageBox("The value over range, please fill again"); else { m_cscrollbar_FPGADlg_wgray.SetScrollPos(fpgagrayflag); fpgaPatflag = FPGA_W_PAT; MakeGrayAdjPacket(fpgaPatflag,fpgagrayflag,Write_HID_Buf); flag_FpgaDlgtoMainDlg = FPGADLGSENDDATA; fpgaCallMainMsg(); } } } } } } case VK_ESCAPE: return TRUE; break; } return CDialog::PreTranslateMessage(pMsg); }
switch(pMsg->wParam)
{
case VK_RETRUN:
......
case VK_ESCAPE:
......
retrun TRUE;
break;
}中,一定要注意返回值为TRUE,这句不能省略。
另,对编辑框回车键的处理可以参考下文:
http://blog.csdn.net/phenixyf/article/details/41083381