最近本人在研究CppWebBrowser的用法,發現這個控件最大的毛病就是不響應回車,即使用OleInitialize(NULL)來初始化也一樣。經過在CSDN的一發查找,發現了Delphi的解決代碼,先專成BCB的代碼公布如下。
先聲明一個私有變量:
IOleInPlaceActiveObject __RPC_FAR *FOleInPlaceActiveObject;
然後在主窗體添加一個ApplicationEvents控件,在它的OnMessage事件裡天加入下代碼:
void __fastcall TfmChildwin::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
IOleInPlaceActiveObject __RPC_FAR *iOIPAO;
Idispatch __RPC_FAR *Dispatch;
if(CppWebBrowser==NULL) //CppWebBrowser就是窗體上的CppWebBrowser控件
{
Handled=false;
return;
}
Handled=(IsDialogMessage(CppWebBrowser->Handle,&Msg));
if(Handled&&(!CppWebBrowser->Busy))
{
if(FOleInPlaceActiveObject==NULL)
{
Dispatch=CppWebBrowser->Application;
if(Dispatch!=NULL)
{
Dispatch->QueryInterface(__uuidof(IOleInPlaceActiveObject),(void**)&iOIPAO);
if(iOIPAO!=NULL)
FOleInPlaceActiveObject = iOIPAO;
}
}
if(FOleInPlaceActiveObject!=NULL)
if((Msg.message == WM_KEYDOWN||Msg.message==WM_KEYUP)&&(Msg.wParam==VK_BACK||Msg.wParam==VK_LEFT||Msg.wParam==VK_RIGHT)){}
else
FOleInPlaceActiveObject->TranslateAccelerator(&Msg);
}
}
作者mail:[email protected]
老妖注: 不過,如果您的Form中加入了其他的第三方控件,如SuiPack,以上所述方法不會起作用.奇怪ing….也希望Nicrosoft朋友看一下.