/******************************************************************************
*功能://解决CppWebBrowse的TextArea组件不能获取回车符的问题
*参数:
******************************************************************************/
typedef HRESULT (*LPFNOBJECTFROMLRESULT)(
LRESULT lResult,
REFIID riid,
WPARAM wParam,
void** ppvObject
);
LPFNOBJECTFROMLRESULT pfnObjectFromLRESULT = NULL;
void __fastcall TMainForm::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
try
{
if(Msg.message==WM_KEYDOWN && Msg.wParam==VK_RETURN ){
char buff[256];
GetClassName(Msg.hwnd,buff,256);
if(strcmp(buff,"Internet Explorer_Server") == 0){
if(!pfnObjectFromLRESULT){
static HINSTANCE hInst = ::LoadLibrary("OLEACC.DLL");
if(hInst){
pfnObjectFromLRESULT = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" );
}
}
if (pfnObjectFromLRESULT ){
// 根据 HWND 获取 COM DOM 对象
IOleInPlaceActiveObject __RPC_FAR *iOIPAO = NULL;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage("WM_HTML_GETOBJECT");
::SendMessageTimeout( Msg.hwnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
HRESULT hr = pfnObjectFromLRESULT( lRes, __uuidof(IOleInPlaceActiveObject),0,(void**)&iOIPAO);
//Handled=(IsDialogMessage(Msg.hwnd,&Msg));
if ( SUCCEEDED(hr) && iOIPAO){
System::DelphiInterface<IHTMLDocument2> spDoc2;
System::DelphiInterface<IHTMLElement> spElement;
System::DelphiInterface<IHTMLTextAreaElement> spInputElement;
BSTR bstrInputElementName = NULL;
iOIPAO->QueryInterface(__uuidof(IHTMLDocument2), (void**)& spDoc2);
hr = spDoc2->get_activeElement(&spElement);
if(SUCCEEDED(hr) && spElement){
spElement->QueryInterface(IID_IHTMLTextAreaElement,(void**)&spInputElement);
if(spInputElement){
spInputElement->get_type(&bstrInputElementName);
iOIPAO->TranslateAccelerator(&Msg);
}
}
spDoc2.Release();
spElement.Release();
spInputElement.Release();
}
iOIPAO->Release();
}
}
}
}__finally
{}
}