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);
}
注意事项:在PreTranslateMessage函数中,区分按键的部分,即
switch(pMsg->wParam)
{
case VK_RETRUN:
......
case VK_ESCAPE:
......
retrun TRUE;
break;
}中,一定要注意返回值为TRUE,这句不能省略。
另,对编辑框回车键的处理可以参考下文:
http://blog.csdn.net/phenixyf/article/details/41083381