none
Interface 使用的困惑(CHtmlView) RRS feed

  • 问题

  • 问题见代码中注释

    	CComPtr<IHTMLDocument2> pDoc;
    	CComPtr<IHTMLElementCollection> pColl;
    	CComPtr<IHTMLElement> pElem;
    	CComPtr<IDispatch> pDisp;
    	CComPtr<IDispatch> pTemp;
    	CComBSTR bstrTag;
    	CComVariant varI;
    	LONG len;
    
    	m_treeTag.DeleteAllItems();
    	m_treeTag.SetRedraw(FALSE);
    
    	pDisp=GetHtmlDocument();
    	pDisp->QueryInterface(&pDoc);
    	pDoc->get_all(&pColl);
    	pColl->get_length(&len);
    
    	for(LONG i=0;i<len;i++){
    		varI=i;
    		pElem=NULL;
    
    		pColl->item(varI,varI,&pTemp);
    		pTemp->QueryInterface(&pElem);
    
    		pElem->get_tagName(&bstrTag);
    		HTREEITEM hItem=m_treeTag.InsertItem(CString(bstrTag),NULL);
    
    		//问题:
    		//希望能把该元素的接口保存下来,以备点击item时调用
    		//不过使用下面的方法会出错
    		//DWORD param=(DWORD)(LPVOID)(IHTMLElement*)pElem;
    		//m_treeTag.SetItemData(hItem,param);
    		//调用如下,PS:以下调用在其他函数里
    		//CComPtr<IHTMLElement> pElem;
    		//pElem=(IHTMLElement*)(LPVOID)m_treeTag.GetItemData(hItem);
    		//pElem->Get_id(...);	<----该行出错
    	}
    	m_treeTag.SetRedraw(TRUE);
    2010年2月11日 12:33

答案

  • 页面上是否有AJAX?pElem是否为空?检查每一步的返回值是否是成功。
    你需要在BeforeNavigate2的时候把每个item release掉。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年2月11日 16:53
    版主