怎样在CHtmlView里得到连接并在新窗口打开? 清查阅: MSDN::BHOs 主题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,得到当前王爷中的所有超连接,利用IHtmlDocument2#include <mshtml.h>void CMyHtmlView::OnAlllinks() { IHTMLDocument2 *pDocument; LPDISPATCH disp; IHTMLElementCollection *pConn; IHTMLAnchorElement *pElem; HRESULT hr; CString strLinks; long p,i; disp = GetHtmlDocument(); hr = disp->QueryInterface(IID_IHTMLDocument2, (LPVOID *) &pDocument); disp->Release(); if(FAILED(hr)) { MessageBox("document error!"); return; } hr = pDocument->get_links(&pConn); if(FAILED(hr)) { MessageBox("links error!"); return; } pConn->get_length(&p); BSTR bstr; for( i =0 ; i < p ; i++) { pConn->item(COleVariant(i),COleVariant((long)0),&disp); disp->QueryInterface(IID_IHTMLAnchorElement ,(LPVOID*)&pElem); pElem ->get_href(&bstr); strLinks+=bstr; strLinks+="\r\n"; disp->Release(); } AfxMessageBox(strLinks); //临时用AfxMessageBox显示一下 SysFreeString(bstr); pConn->Release();} 2,这个.........这样来。void CMyHtmlView::OpenNewLinks(CString url){ AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,(LPARAM)CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;; CMDIChildWnd *pChild; CReaderView *pView; pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); pView = (CReaderView *) pChild->GetActiveView(); pView ->Navigate2(url);}然后上面的OnAllLinks函数中稍微改改就成了 BSTR bstr; for( i =0 ; i < p ; i++) { pConn->item(COleVariant(i),COleVariant((long)0),&disp); disp->QueryInterface(IID_IHTMLAnchorElement ,(LPVOID*)&pElem); pElem ->get_href(&bstr); strLinks=bstr; OpenNewLinks(strLinks); disp->Release(); } 这样就成了吧~ 恩?什么意思?左上角的框架??遇到<frame.....>,这个....要先确定框架,然后Get框架的文档内容,然后依照上述方法打开。 确定框架么,你到edyang的主页找HtmlDoc这个例子,其中有处理frame的部分他主页的网址是http://263.csdn.net/edyang http://263.csdn.net/edyang 网页进不去!好象不存在! IHTMLDocument2* pDoc;LPDISPATCH disp;IHTMLFramesCollection2* pCol;disp = GetHtmlDocument();disp->QueryInterface(IID_IHTMLDocument2, (LPVOID *) &pDoc);disp->Release(); pCol = pDoc->frames;long l = pCol->length;if(l > 0) AfxMessageBox("there are frames");这样吧,我没试啊,我不大会COM拟这样试试把 可以得到frames,但frames下的item应该怎样调用?并得到一个frames元素?即使得到了又怎么用呢? 关于复选功能的树视控件的用法? 我是一新手,在做WINSOCK 多播程序遇到问题请大家帮助 变量赋值问题. 队列和堆栈的区别?? 为什么 库文件 总是出错, 100分求救, 已经好几次都是着个问题, 一个很菜的题:BYTE字节串与CLongBinary类之间如何转换,是不是不用转换?(20分,不成敬意) 求助:GDI+中 Bitmap::GetHBITMAP 的使用问题? 奇怪的问题:OLE方式打开EXCEL 关于注册表,文件操作,文件读写的一些基本问题. 那位大侠可以提供T-Snake的算法 如何讓鼠標指針跟隨光標移動呢? windows style 里哪个参数是允许窗口改变大小的???
1,得到当前王爷中的所有超连接,利用IHtmlDocument2#include <mshtml.h>void CMyHtmlView::OnAlllinks()
{
IHTMLDocument2 *pDocument;
LPDISPATCH disp;
IHTMLElementCollection *pConn;
IHTMLAnchorElement *pElem;
HRESULT hr;
CString strLinks;
long p,i;
disp = GetHtmlDocument();
hr = disp->QueryInterface(IID_IHTMLDocument2, (LPVOID *) &pDocument);
disp->Release();
if(FAILED(hr))
{
MessageBox("document error!");
return;
}
hr = pDocument->get_links(&pConn);
if(FAILED(hr))
{
MessageBox("links error!");
return;
}
pConn->get_length(&p);
BSTR bstr;
for( i =0 ; i < p ; i++)
{
pConn->item(COleVariant(i),COleVariant((long)0),&disp);
disp->QueryInterface(IID_IHTMLAnchorElement ,(LPVOID*)&pElem);
pElem ->get_href(&bstr);
strLinks+=bstr;
strLinks+="\r\n";
disp->Release();
}
AfxMessageBox(strLinks); //临时用AfxMessageBox显示一下
SysFreeString(bstr);
pConn->Release();
}
void CMyHtmlView::OpenNewLinks(CString url)
{
AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,(LPARAM)CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;;
CMDIChildWnd *pChild;
CReaderView *pView;
pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
pView = (CReaderView *) pChild->GetActiveView();
pView ->Navigate2(url);
}然后上面的OnAllLinks函数中
稍微改改就成了 BSTR bstr;
for( i =0 ; i < p ; i++)
{
pConn->item(COleVariant(i),COleVariant((long)0),&disp);
disp->QueryInterface(IID_IHTMLAnchorElement ,(LPVOID*)&pElem);
pElem ->get_href(&bstr);
strLinks=bstr;
OpenNewLinks(strLinks);
disp->Release();
}
这样就成了吧~
左上角的框架??遇到<frame.....>,这个....要先确定框架,然后Get框架的文档内容,然后依照上述方法打开。
网页进不去!好象不存在!
LPDISPATCH disp;
IHTMLFramesCollection2* pCol;
disp = GetHtmlDocument();
disp->QueryInterface(IID_IHTMLDocument2, (LPVOID *) &pDoc);
disp->Release();
pCol = pDoc->frames;
long l = pCol->length;
if(l > 0)
AfxMessageBox("there are frames");
这样吧,我没试啊,我不大会COM
拟这样试试把