两种方法实现回车响应tab键:
第一种比较简单:
只要在你的对话框类C**Dlg中右击添加虚函数PreTranslateMessage然后加如下代码即可:
BOOL CTest2Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_RETURN)
{
pMsg->wParam=VK_TAB;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
第二种方法好一点,但实现起来也比较难一点:
1.新建一个基于对话框的工程test3;我把"确定"和"取消"都删除了!
2.在对话框中插入如图的控件(其中Button1的ID是IDOK)
3.右击工程添加一个MFC类,类名为CMyEdit
4.然后右击这个新类添加WM_KEYDOWN消息函数OnKeyDown;并加如下代码:
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
{
CTest3Dlg * pwnd=(CTest3Dlg *)GetParent();//为个是主对话框类,所以在CPP文件中加#include "test3Dlg.h"
//不要在头文件中加,在头文件中会出错的!
pwnd->NextDlgCtrl();
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
5.然后将主对话框中的两个编辑框定义关联变量:
在classwizard中选择 member variables 选项,class name选择对话框类,control ids中选择编辑框的id号,然后选择add variable按扭。在对话框中 categary选择control, variable type 刚才定义的类m_myedit1,m_myedit2;那时它会提示你加头文件
"MyEdit.h" 你此时就在头文件Test3Dlg.h加#include "MyEdit.h"
6.为了让焦点落在按钮1时,若按下回车响应按钮1的函数,我加了两个函数:
void CTest3Dlg::OnOK()//其中这个就是按钮1的响应函数
{
// TODO: Add extra validation here
MessageBox("dragon");
//CDialog::OnOK();//我为了不让默认的OnOK函数执行,将它屏蔽了!
}
void CTest3Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)//右击类添加的!
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
OnOK();
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}