3,055
社区成员
发帖
与我相关
我的任务
分享
//
BOOL CDlgTest2Dlg::PreTranslateMessage(MSG* pMsg)
{
CRect brect;
m_browser.GetWindowRect(&brect);
m_browser.GetClientRect(&brect);
CPoint point(pMsg->pt);
m_browser.ScreenToClient(&point);
if (!brect.PtInRect(point))
{
return CDialog::PreTranslateMessage(pMsg);
}
IHTMLDocument2* pdoc2=NULL;
IHTMLElement* pElement=NULL;
IHTMLRectCollection *pCollection = NULL;
IHTMLDocument2* pdoc3=NULL;
IHTMLElement* pElement2=NULL;
IDispatch* pDisp=NULL;
pDisp = m_browser.GetDocument();
if (pDisp == NULL) return TRUE;
pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pdoc2);
pDisp->Release();
if (pdoc2 == NULL) return TRUE;
pdoc2->elementFromPoint (point.x,point.y ,&pElement);
pdoc2->Release();
if(pElement != NULL)
{
_variant_t vvv;
pElement->getAttribute(_bstr_t("name"),0,&vvv);
CString vvv2 = vvv.operator _bstr_t().operator char*();
TRACE("vvv2 = %s\r\n",vvv2);
_variant_t tag = _bstr_t("");
pElement->get_tagName(&tag.bstrVal);
CString button2 = tag.operator _bstr_t().operator char*();
TRACE("tag = %s\r\n",button2);
CString button;
if (button2 == "FRAME")
{
long l;
pElement->get_offsetLeft(&l);
long t;
pElement->get_offsetTop(&t);
TRACE("offsetLeft = %d offsetTop = %d\r\n",l,t);
TRACE("x = %d y = %d\r\n",point.x,point.y);
TRACE("x1 = %d y1 = %d\r\n",point.x - l,point.y - t);
IDispatch* pDisp2=NULL;
pElement->get_document(&pDisp2);
pDisp2->QueryInterface(IID_IHTMLDocument2,(void**)&pdoc3);
pDisp2->Release();
CPoint p3;
p3.x = point.x - l;
p3.y = point.y - t;
pdoc3->elementFromPoint (p3.x,p3.y,&pElement2);
pdoc3->Release();
BSTR bStr;
pElement2->get_innerHTML(&bStr);
CString szTemp;
szTemp = bStr;
TRACE("html = %s\r\n",szTemp.Left(200));
//
// BSTR bStr2;
_variant_t id = _bstr_t("");
pElement2->get_id(&id.bstrVal);
button = id.operator _bstr_t().operator char*();
TRACE("id = %s\r\n",button);
if (button2 == "FRAME")
{
long l;
pElement->get_offsetLeft(&l);
long t;
pElement->get_offsetTop(&t);
TRACE("offsetLeft = %d offsetTop = %d\r\n",l,t);
TRACE("x = %d y = %d\r\n",point.x,point.y);
TRACE("x1 = %d y1 = %d\r\n",point.x - l,point.y - t);
IHTMLFramesCollection2 *pFrames;
pdoc2->get_frames(&pFrames);
_variant_t index = long (1);
_variant_t varResult;
pFrames->item(&index,&varResult);
IDispatch *pDispatch1 = varResult;
IHTMLWindow2 *pWindows;
pDispatch1->QueryInterface(IID_IHTMLWindow2,(void**)&pWindows);
pDispatch1->Release();
pWindows->get_document(&pdoc3);
pWindows->Release();
// IHTMLWindow2 *pWindows2;
// pElement->QueryInterface(IID_IHTMLWindow2,(void**)&pWindows2);
//
// pWindows2->get_document(&pdoc3);
// pWindows2->Release();
// IDispatch* pDisp2=NULL;
// pElement->get_document(&pDisp2);
//
//
// pDisp2->QueryInterface(IID_IHTMLDocument2,(void**)&pdoc3);
// pDisp2->Release();
CPoint p3;
p3.x = point.x - l;
p3.y = point.y - t;
pdoc3->elementFromPoint (p3.x,p3.y,&pElement2);
pdoc3->Release();
if (pElement2 == NULL)
return CDialog::PreTranslateMessage(pMsg);
BSTR bStr;
pElement2->get_innerHTML(&bStr);
CString szTemp;
szTemp = bStr;
TRACE("html = %s\r\n",szTemp.Left(200));
//
// BSTR bStr2;
_variant_t id = _bstr_t("");
pElement2->get_id(&id.bstrVal);
button = id.operator _bstr_t().operator char*();
TRACE("id = %s\r\n",button);
}