下面是c++ builder的例子,将retrun键更改为tab键即可。 原理是一样的, 你也可以有本论坛搜索TranslateMessage找到答案。
在formshow中增加如下代码:
SaveMessageHandler = Application->OnMessage;
Application->OnMessage = MyMessageHandler;
void __fastcall TMainForm::MyMessageHandler(tagMSG &Msg, bool &Handled)
{
if((HaveWebFrmActive())
&& ((Msg.message >= WM_KEYFIRST) && (Msg.message <= WM_KEYLAST))
&& ((Msg.wParam == VK_RETURN)
|| (Msg.wParam == VK_BACK)
|| (Msg.wParam == VK_LEFT)
|| (Msg.wParam == VK_RIGHT)))
{
Handled = true;
TranslateMessage(&Msg);
DispatchMessage(&Msg);
if((Msg.wParam == VK_RETURN))
{
if(MDIChildCount>0)
{
if(comIE->Focused())
{
Handled = false;
}
else
{
DWORD dwRet;
Handled = false;
SendMessageTimeout(((TFrmWeb*)MDIChildren[0])->CppWebBrowser->Handle,Msg.message,Msg.wParam,Msg.lParam,SMTO_ABORTIFHUNG ,1000,&dwRet);
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
else //如果没有WEB窗体,
{
Handled = false;
}
}
else
{
Handled = true;
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
else
Handled = false;
}
bool TMainForm::HaveWebFrmActive()
{
if(Screen->ActiveForm != NULL)
if(Screen->ActiveForm->Handle == MainForm->Handle)
return true;
else
for(int i = 0; i < MDIChildCount; i++)
{
if(MDIChildren->Handle == Screen->ActiveForm->Handle)
return true;
}
return false;
}