CHtmlView && CHtmlCtrl问题

一行乱码 2009-06-17 10:02:33
因为要在对话框中加载一个网页
所以就按照网上的做了一个CHtmlCtrl的类

class CHtmlCtrl:public CHtmlView
{
... ...
};

class CMyHtmlCtrl:public CHtmlCtrl
{
virtual void OnNavigateComplete2( LPCTSTR strURL );
... ...
};

在自己的代码中定义了一个CMyHtmlCtrl的对象m_my;

m_my.Navigate2(_T("http://192.168.1.1"),0,NULL,NULL);
m_my.OnNavigateComplete2(_T("http://192.168.1.1"));

在虚构函数OnNavigateComplete2中想实现能够自动下载此网页中的东西,获得href的代码如下:

IHTMLDocument2 * pDoc=NULL;
IDispatch * pDocDisp=NULL;
pDocDisp=GetHtmlDocument();//取得HTML的网页文档
if (pDocDisp)
{
//绑定接口
if (SUCCEEDED(pDocDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc)) && pDoc) //SUCCEEDED判断调用是否成功
{
IHTMLElementCollection * pAnchors = NULL;//帧集合接口
if (SUCCEEDED(pDoc->get_all(&pAnchors)) && pAnchors)//绑定接口
{
long imgcount;
if (S_OK==(pAnchors->get_length(&imgcount))) //取得数目
{

for (int i=0; i<imgcount; i++)//imgcount=0?
{
VARIANT index;
VariantInit(&index);
index.vt = VT_I4;
index.intVal = i;

IDispatch * pItem = NULL;
pAnchors->item(index,index,&pItem);//在给定的帧集合中取出对象
if (pItem)
{
IHTMLElement * pElement = NULL
HRESULT hr = pItem->QueryInterface( IID_IHTMLElement,(void **) &pElement);

IHTMLAnchorElement * pAnchorElement = NULL;
if (SUCCEEDED(pItem->QueryInterface(IID_IHTMLAnchorElement,(void **)&pAnchorElement)) && pAnchorElement)
{
BSTR href;
pAnchorElement->get_href(&href); //获取链接URL
}
}
}
}
}
}
}


问题:
pDocDisp=GetHtmlDocument();//取得HTML的网页文档
每次跟踪到这个地方就发先pDocDisp为空
这个问题怎么解决?还请高手大大赐教啊!!!
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一行乱码 2009-06-17
  • 打赏
  • 举报
回复
[QUOTE]下面引用由ky310发表的内容:
http://www.builder.com.cn/2007/1016/559226.shtml
[/QUOTE]

请允许我小汗一下,这个我已经全部做完了呢,
我就是要在这个的基础上再加一个自动下载的功能。。。
不过还是谢谢你呵~
ky310 2009-06-17
  • 打赏
  • 举报
回复
http://www.builder.com.cn/2007/1016/559226.shtml
一行乱码 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 AllenTing 的回复:]
m_my.Navigate2(_T("http://192.168.1.1"),0,NULL,NULL);
m_my.OnNavigateComplete2(_T("http://192.168.1.1"));

====================>
LZ这是你的代码调用?
如果这样肯定不对,OnNavigateComplete2是Callback函数,由框架调用,你这里自己显式调用肯定不对。
你只需调用m_my.Navigate2(_T("http://192.168.1.1"),0,NULL,NULL);即可。
[/Quote]


吼吼!偶也发现这个问题了
现在这个问题也已经解决喽~
就是重载了OnNavigateComplete2 函数,
然后再在里面发送了一个消息出来。
AllenTing 2009-06-17
  • 打赏
  • 举报
回复
m_my.Navigate2(_T("http://192.168.1.1"),0,NULL,NULL);
m_my.OnNavigateComplete2(_T("http://192.168.1.1"));

====================>
LZ这是你的代码调用?
如果这样肯定不对,OnNavigateComplete2是Callback函数,由框架调用,你这里自己显式调用肯定不对。
你只需调用m_my.Navigate2(_T("http://192.168.1.1"),0,NULL,NULL);即可。


3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧