最近本人在研究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:blueelfin@vip.163.com
老妖注: 不过,如果您的Form中加入了其他的第三方控件,如SuiPack,以上所述方法不会起作用.奇怪ing….也希望Nicrosoft朋友看一下. |