BOOL CDlgzl::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
int nID = GetFocus()->GetDlgCtrlID();
if (nID==IDC_EDIT_SSJE)
{
GetDlgItem(IDC_BUTTON_JZ)->SetFocus();
}
}
return CDialog::PreTranslateMessage(pMsg);
}以上代码按下回车键,将焦点设置在按钮(IDC_BUTTON_JZ)上面,然后再按一次回车键,执行按钮里面的代码,因为焦点在按钮上面,按第二次回车应该是执行按钮的代码吧?但第二次回车没有任何反应,但是通过用TAB键把焦点移动到按钮,然后再按回车,按钮的代码就执行了,请教如何解决上述问题
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
int nID = GetFocus()->GetDlgCtrlID();
if (nID==IDC_EDIT_SSJE)
{
GetDlgItem(IDC_BUTTON_JZ)->SetFocus();
}
}
return CDialog::PreTranslateMessage(pMsg);
}以上代码按下回车键,将焦点设置在按钮(IDC_BUTTON_JZ)上面,然后再按一次回车键,执行按钮里面的代码,因为焦点在按钮上面,按第二次回车应该是执行按钮的代码吧?但第二次回车没有任何反应,但是通过用TAB键把焦点移动到按钮,然后再按回车,按钮的代码就执行了,请教如何解决上述问题
原来拥有输入焦点的窗口对象的指针。如果没有这样的窗口,则返回值为NULL。返回的指针可能是临时的,不应被保存。说明:
这个函数要求得到输入焦点。输入焦点将随后的所有键盘输入定向到这个窗口。原来拥有输入焦点的任何窗口都将失去它。
SetFocus成员函数项失去输入焦点的窗口发送一条WM_KILLFOCUS消息,并向接收输入焦点的窗口发送一条WM_SETFOCUS消息。它还激活该窗口或它的父窗口。
如果当前窗口是激活的,但是不具有输入焦点(这意味着,没有窗口具有输入焦点),则任何按下的键都将产生WM_SYSCHAR,WM_SYSKEYDOWN或WM_SYSKEYUP消息。CWnd::GetFocusstatic CWnd* PASCAL GetFocus( );返回值:
指向拥有当前焦点的窗口的指针,如果没有焦点窗口,则返回NULL。这个指针可能是临时的,不能被保存以供将来使用。说明:这个函数获得指向当前拥有输入焦点的CWnd的指针。请参阅:
CWnd::GetActiveWindow, CWnd::GetCapture, CWnd::SetFocus, ::GetFocus
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
int nID = GetFocus()->GetDlgCtrlID();
if (nID==IDC_EDIT_WUYA)
{
CButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON_WUYA);
pButton->SetFocus();
DWORD dwStyle = pButton->GetStyle();
dwStyle |= BS_DEFPUSHBUTTON; pButton->SetButtonStyle(dwStyle);
return TRUE;
}
} return CDialog::PreTranslateMessage(pMsg);
参照Lin 的说法修改,可以得到正确结果! 这样看应该是Tab切换时给 Button设置了BS_DEFPUSHBUTTON属性?