http://dev.hackbase.com/hackbase10/how300178.htm
看看吧
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
//为了保证同步,应该把获取Document内容的代码放到OnDocumentComplete事件
IHTMLDocument2 *document;
IHTMLElement *body;
BSTR title,source,content;
(void *)document=CppWebBrowser1->Document;
document->get_title(&title); //取title
document->get_body(&body);
body->get_outerHTML(&source);//取源程序
body->get_outerText(&content);//取文本
Edit1->Text=title;
Edit2->Text=*URL;
Memo1->Text=source;
Memo2->Text=content;
}
//获得IHTMLDocument2接口(这样似乎安全一点)
hr = CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2,(v
oid**)&pDocument) ;
if( !SUCCEEDED(hr) )
{
ShowMessage("hehe") ;
return ;
}
这个示例将列出
CppWebBrowser当前文件中所有的链接信息.标识为:<a href>...</a>
TCppWebBrowser类的Document属性是个IDispatch接口,利用该接口通过QueryInt
erface方法可以得到其他接口,如常用的IHTMLDocument2接口,然后通过各种接口
的方法可以达到对HTML文件的操作。
//首先判断控件是否已经下载HTML完毕
if( CppWebBrowser1->ReadyState!=4)
{
ShowMessage("not Completed");
return ;
}
IHTMLDocument2* pDocument ;
IHTMLElementCollection* p ;
IHTMLElement* link ;
long len ;
HRESULT hr ;
//获得IHTMLDocument2接口
hr = CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2,(v
oid**)&pDocument) ;
if( !SUCCEEDED(hr) )
{
ShowMessage("hehe") ;
return ;
}
//得到Document中所有的Element
pDocument->get_all(&p) ;
pDocument->Release() ;
p->get_length(&len) ;
for(int i=0;i<len;i++)
{
IDispatch* pDisp ;
Variant j ;
//得到Collection中的第i个Element
p->item((Variant)i,j,&pDisp) ;
hr= pDisp->QueryInterface(IID_IHTMLElement,(void**)&link) ;
if( !SUCCEEDED(hr) )
return ;
pDisp->Release() ;
wchar_t* name ;
//提取tag属性
link->get_tagName(&name) ;
if( wcscmp(name,L"A")==0 )
{
VARIANT v ;
//提取href属性
link->getAttribute(L"HREF",0,&v) ;
wchar_t* va = v.bstrVal ;
AnsiString str = (AnsiString)va ;
ShowMessage(str) ;
}
link->Release() ;
}