⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uihtmlview.cpp

📁 vc座的资源管理器源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	pElement->Release();
	if (FAILED(hr))
		return bRet;
	IHTMLElement *pNewElem=NULL;
	GetHTMLDocument()->createElement(_bstr_t(_T("OPTION")),&pNewElem);
	IHTMLOptionElement *pNewOptElem=NULL;
	hr = E_FAIL;
	if (pNewElem)
		hr = pNewElem->QueryInterface(IID_IHTMLOptionElement,(LPVOID*)&pNewOptElem);
	if (SUCCEEDED(hr))
	{
		if (pszValue)
		{
			_bstr_t bsValue(pszValue);
			pNewOptElem->put_value(bsValue);
		}
		_bstr_t bsText(pszText);
		pNewOptElem->put_text(bsText);
		pSelElem->add(pNewElem,_variant_t(vtMissing));
		pNewOptElem->Release();
		if (bSelect)
		{
			long nLength=0;
			pSelElem->get_length(&nLength);
			if (nLength > 0)
				pSelElem->put_selectedIndex(nLength-1);
		}
		bRet=true;
	}
	if (pSelElem)
		pSelElem->Release();
	return bRet;
}

void CUIHtmlView::GetElement(LPCTSTR pszID,IHTMLElement **pElement)
{
	*pElement=NULL;
	if (m_pHTMLDocument2 == NULL)
		return;
	CComQIPtr<IHTMLElementCollection> spAllElements;	
	m_pHTMLDocument2->get_all(&spAllElements);
	if (spAllElements)
	{
		IDispatch *pDisp=NULL;
		HRESULT hr = spAllElements->item(CComVariant(pszID),CComVariant(0),&pDisp);
		if (SUCCEEDED(hr))
		{
			hr = pDisp->QueryInterface(IID_IHTMLElement,(LPVOID*)pElement);
		}
		pDisp->Release();
	}
}

void CUIHtmlView::ParseDocument()  
{
	if(m_pHTMLDocument2 == NULL)
		return;
	try
	{
		CComQIPtr<IHTMLDocument2> spDocument(m_pHTMLDocument2);
		CComQIPtr<IHTMLElementCollection> spAllElements;	
		spDocument->get_all(&spAllElements);
 		CComBSTR bsIsControl(_T("OBJECT"));
		CComBSTR bsIsImage(_T("IMG"));
		long nElems;
		spAllElements->get_length(&nElems);
		for(long i = 0; i < nElems; i++)
		{
			CComVariant vIndex(i, VT_I4);
			LPDISPATCH pDisp=NULL;
			spAllElements->item(vIndex,vIndex,&pDisp);
			CComQIPtr<IHTMLElement> spAnElement(pDisp);
			pDisp->Release();
			CComBSTR bsTagName;
			spAnElement->get_tagName(&bsTagName);
			if(bsTagName == bsIsControl)
			{
				// This will get you any ActiveX controls in a page.  It is possible 
				// to call methods and properties of the  control off the IHTMLElementPtr.
				CComQIPtr<IHTMLObjectElement> spObj(spAnElement);
				ActiveXControl(spObj);
			}
			else if(bsTagName == bsIsImage)
			{
				CComQIPtr<IHTMLImgElement> spImg(spAnElement);
				ImageElement(spImg);
			}
			else
				Element(spAnElement);
		}
	}
	catch(...)
	{
#ifdef _DEBUG
		AfxMessageBox(_T("Unspecified exception thrown in UIHtmlView"),MB_ICONSTOP);
#endif 
		throw;
	}
}

void CUIHtmlView::ActiveXControl(IHTMLObjectElement *pObj)
{
}

void CUIHtmlView::ImageElement(IHTMLImgElement *pImg)
{
}

void CUIHtmlView::Element(IHTMLElement *pElement)
{
}

void CUIHtmlView::DoDataExchange(CDataExchange* pDX)
{
	CHtmlView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUIHtmlView)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUIHtmlView, CHtmlView)
	//{{AFX_MSG_MAP(CUIHtmlView)
	ON_WM_SETCURSOR()
	ON_COMMAND(ID_BROWSER_GO_BACK, OnBrowserGoBack)
	ON_COMMAND(ID_BROWSER_GO_FORWARD, OnBrowserGoForward)
	ON_COMMAND(ID_BROWSER_GO_BACK, OnBrowserGoBack)
	ON_UPDATE_COMMAND_UI(ID_BROWSER_GO_FORWARD, OnUpdateBrowserGoForward)
	ON_UPDATE_COMMAND_UI(ID_BROWSER_GO_BACK, OnUpdateBrowserGoBack)
	ON_COMMAND(ID_BROWSER_GO_HOME, OnBrowserGoHome)
	ON_COMMAND(ID_BROWSER_REFRESH, OnBrowserRefresh)
	ON_COMMAND(ID_BROWSER_STOP, OnBrowserStop)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUIHtmlView diagnostics

#ifdef _DEBUG
void CUIHtmlView::AssertValid() const
{
	CHtmlView::AssertValid();
}

void CUIHtmlView::Dump(CDumpContext& dc) const
{
	CHtmlView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CUIHtmlView message handlers

void CUIHtmlView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
	// TODO: Add your specialized code here and/or call the base class
	
   HRESULT   hr;
   LPUNKNOWN lpUnknown;
   LPUNKNOWN lpUnknownWB = NULL;
   LPUNKNOWN lpUnknownDC = NULL;

   lpUnknown = m_wndBrowser.GetControlUnknown();
   ASSERT(lpUnknown);

   if (lpUnknown)
   {
      // Get the IUnknown of the WebBrowser control being hosted.
      // The IUnknown returned from GetControlUnknown is not the 
      // IUnknown of the WebBrowser control.  It's actually a
      // IOleObject pointer.
      // 
      hr = lpUnknown->QueryInterface(IID_IUnknown, 
                             (LPVOID*)&lpUnknownWB);

      ASSERT(SUCCEEDED(hr));

      if (FAILED(hr))
         return;

      // Get the IUnknown of the object that fired this event.
      //
      hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);


      ASSERT(SUCCEEDED(hr));

      if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)
      {
         // The document has finished loading.
         //
		  LPDISPATCH pDispatch = GetHtmlDocument();
		  if (pDispatch)
		  {
				hr = pDispatch->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&m_pHTMLDocument2);
				DocumentReady();
				pDispatch->Release();
		  }
      }
      if (lpUnknownWB)
         lpUnknownWB->Release();

      if (lpUnknownDC)
         lpUnknownDC->Release();
   }
}

void CUIHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel) 
{
	// TODO: Add your specialized code here and/or call the base class	ReleaseDocument();
	m_bSetCursor = true;
#ifdef _DEBUG
	if (GetKeyState(VK_LCONTROL) < 0)
	{
		if (baPostedData.GetSize() > 0)
		{
			LPTSTR pszData = new TCHAR[baPostedData.GetSize()+1];
			LPTSTR pszPosted = pszData;
			for(int i=0;i < baPostedData.GetSize();i++)
			{
				*pszPosted = baPostedData[i];
				pszPosted =_tcsinc(pszPosted);
			}
			*pszPosted = '\0';
			CString sMess;
			sMess = _T("Posted Data: ");
			sMess += pszData;
			sMess += _T("\n");
			sMess += _T("URL: ");
			sMess += lpszURL;
			AfxMessageBox(sMess);
			delete pszData;
		}
	}
#endif
	ReleaseDocument();
	if (m_hNotifyWnd)
	{
		::SendMessage(m_hNotifyWnd,WM_APP_CB_IE_SET_EDIT_TEXT,(WPARAM)lpszURL,0);	
	}
	CHtmlView::OnBeforeNavigate2(lpszURL, nFlags,	lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
}

BOOL CUIHtmlView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	// TODO: Add your message handler code here and/or call default
	if (m_bSetCursor)
	{
		SetCursor(::LoadCursor(NULL,IDC_APPSTARTING));
		return TRUE;
	}
	
	return CHtmlView::OnSetCursor(pWnd, nHitTest, message);
}

void CUIHtmlView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
	
}

void CUIHtmlView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{
	// TODO: Add your specialized code here and/or call the base class	
	CHtmlView::OnActivateView(bActivate, pActivateView, pDeactiveView);
	if (bActivate && pDeactiveView != NULL) 
	{
		OnTitleChange(GetLocationURL());
		SetActiveWindow();
	}
}

void CUIHtmlView::OnCommandStateChange(long nCommand, BOOL bEnable) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch(nCommand) 
	{
       case CSC_NAVIGATEFORWARD: 
		   m_bGoForward = bEnable;
           break;
       case CSC_NAVIGATEBACK:
           m_bGoBack = bEnable;
           break;       
	   default:
           break;
	}  
	
	CHtmlView::OnCommandStateChange(nCommand, bEnable);
}

void CUIHtmlView::OnUpdateBrowserGoBack(CCmdUI *pUI)
{
	pUI->Enable(m_bGoBack);
}

void CUIHtmlView::OnUpdateBrowserGoForward(CCmdUI *pUI)
{
	pUI->Enable(m_bGoForward);
}

void CUIHtmlView::OnBrowserGoBack() 
{
	// TODO: Add your command handler code here
	GoBack();
}

void CUIHtmlView::OnBrowserGoForward() 
{
	// TODO: Add your command handler code here
	GoForward();	
}

void CUIHtmlView::OnBrowserGoHome() 
{
	// TODO: Add your command handler code here
	GoHome();	
}

void CUIHtmlView::OnBrowserRefresh() 
{
	// TODO: Add your command handler code here
	Refresh();	
}

void CUIHtmlView::OnBrowserStop() 
{
	// TODO: Add your command handler code here
	Stop();	
}

void CUIHtmlView::OnDocumentComplete(LPCTSTR lpszUrl)
{
	// make sure the main frame has the new URL.  This call also stops the animation
	if (m_hNotifyWnd)
	{
		::SendMessage(m_hNotifyWnd,WM_APP_CB_IE_SET_EDIT_TEXT,(WPARAM)lpszUrl,0);	
	}
	CHtmlView::OnDocumentComplete(lpszUrl);
}

void CUIHtmlView::OnTitleChange(LPCTSTR lpszText)
{
	// this will change the main frame's title bar
	if (m_pDocument != NULL)
		m_pDocument->SetTitle(lpszText);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -