最终方案:是在OnOK()中循环改变对话框上的各个控件的焦点,而且这个方法不需要去定义EDIT的WndProc.
void CTestDlg::OnOK() {
// TODO: Add extra validation here
GetNextDlgTabItem(GetFocus(),false)->SetFocus();
// CDialog::OnOK(); //注释掉基类的OnOK(),这按回车键就不会关闭对话框了.
}
这里的OnOK()是MFC默认的响应回车键的函数,它是一个虚函数,由覆盖基类的虚函数OnOK()而来,它是由按钮的ID必须是IDOK所产生的函数,不是什么IDC_OK那种按钮的消息响应函数OnOk()(不是虚函数,k是小写的)
但是IDOK按钮即使删除了也没有关系,只要代码中重写了基类的 OnOK()就可以了.
也就是说,在对话框上面,每次按ENTER回车键时,都是默认的那个OnOK()来响应回车键,因此可以在OnOK()中GetNextDlgTabItem(GetFocus(),false)->SetFocus()
让不同的控件循环获得焦点,就是按照控件的Tab Order顺序来转移焦点,但是前提是必须设置控件的Tab stop属性
------Tab stop属性
//----- 下面是比较复杂的解决办法
输入焦点的传递:
第一个输入框EDIT1按下回车键后,焦点转移到第二个输入框EDIT2
思路:自己编写一个EDIT编辑框的窗口过程函数WndProc(),替换MFC的WndProc()
让编辑框的所有消息都通过自己的WndProc()来处理.