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

📄 greenbrowserview.cpp

📁 用VC写的浏览器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void CGreenBrowserView::ToNavigate(LPCTSTR URL, DWORD dwFlags, LPCTSTR lpszTargetFrameName, LPCTSTR lpszHeaders, LPVOID lpvPostData,  DWORD dwPostDataLen, BOOL bOnlyRefresh)
{
	try{
	CString str = URL;
	CString str2 = URL;
	m_lpszUrl=URL;
	m_bFirst = TRUE;
	
	if(m_bEnWebProxy)
	{
		if(m_strWebProxy.IsEmpty() && pmf!=NULL)
			m_strWebProxy = pmf->m_strDefaultWebProxy;

		if((str.Left(4)=="http" || str.Left(4)=="www.") && str.Find(m_strWebProxy)<0)
		{
			if(str.Left(4)=="www.")
				str2 = "http://" + str;
			if(m_strWebProxy.Find("%s")>0)
			{
				str2.Replace(":", "%3A");
				str2.Replace("/", "%2F");
				str = m_strWebProxy;
				str.Replace("%s", str2);
			}
			else if(m_strWebProxy.Find("%S")>0)
			{
				str = m_strWebProxy;
				str.Replace("%S", str2);
			}
			else
				str = m_strWebProxy+str2;
			Navigate2(str, dwFlags, lpszTargetFrameName, lpszHeaders,lpvPostData, dwPostDataLen);
		}
		else if(!bOnlyRefresh)
			Navigate2(str, dwFlags, lpszTargetFrameName, lpszHeaders,lpvPostData, dwPostDataLen);
	}
	else if(!bOnlyRefresh)
		Navigate2(str, dwFlags, lpszTargetFrameName, lpszHeaders,lpvPostData, dwPostDataLen);
	}catch(...){}

	m_nProgress = -1;
}

void CGreenBrowserView::OnParentNotify(UINT message, LPARAM lParam) 
{
	CFixedHtmlView::OnParentNotify(message, lParam);
	
	// TODO: Add your message handler code here
	try{
	CChildFrame* tcf = (CChildFrame*)GetParentFrame();
	//
	pmf->m_ptMouseDown.x = LOWORD((DWORD)lParam);
	pmf->m_ptMouseDown.y = HIWORD((DWORD)lParam);
	//
	if (message==WM_LBUTTONDOWN && pmf->m_nLButtonDown)
	{
		if (MouseAction(pmf->m_nLButtonDown))
		{
			if (pmf->m_nMButtonDown>=ID_OPEN_LINK && pmf->m_nMButtonDown<=ID_OPEN_LINK_DEACTIVE)
			{
				//for that simu as shift+click 
				QueryPerformanceCounter(&m_tLastClick);
				m_bLClick = TRUE;
			}
			return;
		}
	}
	else if (message==WM_RBUTTONDOWN && pmf->m_nRButtonDown)
	{
		if (MouseAction(pmf->m_nRButtonDown))
		{
			if (pmf->m_nMButtonDown>=ID_OPEN_LINK && pmf->m_nMButtonDown<=ID_OPEN_LINK_DEACTIVE)
			{
				//for that simu as shift+click 
				QueryPerformanceCounter(&m_tLastClick);
				m_bLClick = TRUE;
			}
			SetCapture();
			m_bIsCapture = TRUE;
			pmf->m_bPopRightMenu=FALSE;
			return;
		}
	}
	//
	if((message == WM_LBUTTONDOWN || message == WM_RBUTTONDOWN) && (g_bLinkInNewWindow || tcf->m_bLock || g_bKillAutoWin) )
	{
		if(message == WM_LBUTTONDOWN )
		{
			QueryPerformanceCounter(&m_tLastClick);
			m_bRClick = FALSE;
			m_bLClick = TRUE;
			m_ptLClick.x = LOWORD((DWORD)lParam);
			m_ptLClick.y = HIWORD((DWORD)lParam);
		}
		else if(message == WM_RBUTTONDOWN )
		{
			QueryPerformanceCounter(&m_tLastRClick);
			m_bRClick = TRUE;
			m_bLClick = FALSE;
		}
		else
			m_bRClick = FALSE;
	}
	if  ( (message==WM_RBUTTONDOWN) && 
		  (pmf->m_bRMouseDrag || pmf->m_bRMouseGesture)
		)
	{
		SetCapture();
		m_bIsCapture = TRUE;
		//m_bRClick = FALSE;
		m_ptRClick.x = LOWORD((DWORD)lParam);
		m_ptRClick.y = HIWORD((DWORD)lParam);
		m_ptPrev = m_ptRClick;
		g_nGestureHead = 0;
		g_nGestureTail = 0;
		pmf->m_bPopRightMenu=TRUE;
	}
	}catch(...){}
}


void CGreenBrowserView::OnToolsAutoscrollAutoscrollingafterdownloading() 
{
	// TODO: Add your command handler code here
	m_bScrollAfterDL = !m_bScrollAfterDL;

	if(pmf!=NULL)
		pmf->m_bDefScrollAfterDL = m_bScrollAfterDL;
}

void CGreenBrowserView::OnUpdateToolsAutoscrollAutoscrollingafterdownloading(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bScrollAfterDL);
}

void CGreenBrowserView::OnUpdateToolsAutoscrollSpeed(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(pmf->m_bMouseCtrlScrSpeed)
		pCmdUI->Enable(FALSE);
	else
		pCmdUI->Enable();

	if(pCmdUI->m_nID == ID_TOOLS_AUTOSCROLL_FAST)
		pCmdUI->SetCheck(m_nSrSpeed==3);
	else if(pCmdUI->m_nID == ID_TOOLS_AUTOSCROLL_MEDIUM)
		pCmdUI->SetCheck(m_nSrSpeed == 2);
	else
		pCmdUI->SetCheck(m_nSrSpeed == 1);
}

void CGreenBrowserView::OnToolsAutoscrollUseautoscrolling() 
{
	// TODO: Add your command handler code here
	m_bUseAutoScroll = !m_bUseAutoScroll;
	if(pmf!=NULL)
		pmf->m_bDefUseAutoScroll = m_bUseAutoScroll;

	//start to scroll
	if(!m_nScrollTimer && (m_bUseAutoScroll || pmf->m_bAllScroll) && m_nSrSpeed!=0)
	{
		if(m_nProgress==100 || m_nProgress<0 || (!m_bScrollAfterDL && m_nProgress>=0))
		{
			if(pmf->m_bMouseCtrlScrSpeed)
				m_nLastScrSpd = STOP_TIMER;
			else
				m_nLastScrSpd = (UINT)((g_fSeed*100)/(m_nSrSpeed*m_nSrSpeed));
			m_nScrollTimer = SetTimer(2132, m_nLastScrSpd, NULL);
		}
	}
	else if(!(m_bUseAutoScroll || pmf->m_bAllScroll) && m_nScrollTimer)
	{
		if(m_nScrollTimer)
			KillTimer(m_nScrollTimer);
		m_nScrollTimer = 0;
	}
}

void CGreenBrowserView::OnUpdateToolsAutoscrollUseautoscrolling(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	try{
		pmf->ToolBarSetCheck(pCmdUI, m_bUseAutoScroll);
	}catch(...){}
}

void CGreenBrowserView::ChangeSpeed(int nSpeed)
{
	if(m_nScrollTimer)
	{
		KillTimer(m_nScrollTimer);
		m_nScrollTimer = 0;
	}

	//start to scroll
	if(!m_nScrollTimer && (m_bUseAutoScroll || pmf->m_bAllScroll) && nSpeed!=0)
	{
		if(m_nProgress==100 || m_nProgress<0 || (!m_bScrollAfterDL && m_nProgress>=0))
		{
			if(pmf->m_bMouseCtrlScrSpeed)
				m_nLastScrSpd = nSpeed;
			else
				m_nLastScrSpd = (UINT)((g_fSeed*100)/(m_nSrSpeed*m_nSrSpeed));
			m_nScrollTimer = SetTimer(2132, m_nLastScrSpd, NULL);
		}
	}
}

void CGreenBrowserView::WBScroll()
{
	CGreenBrowserView* pvw = this;
	if(pvw->m_bToClose)
		return;

	LPDISPATCH pDisp = NULL;
	IHTMLDocument2 *pHTMLDoc = NULL;
	IHTMLWindow2 *pHTMLWnd = NULL;

	try{
	pDisp = pvw->GetHtmlDocument();
	if( pDisp )
	{
		if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
		{
			if(SUCCEEDED(pHTMLDoc->get_parentWindow( &pHTMLWnd )))
			{
				if (pmf->m_nAutoScrollPage)
				{
					CRect	rect;
					int	blockHeight;
					pvw->m_wndBrowser.GetWindowRect(&rect);
					blockHeight = (rect.bottom - rect.top) / pmf->m_nAutoScrollPage;
					m_nScrollSize++;
					if (m_nScrollSize>=blockHeight)
					{
						while(m_nScrollSize>0)
						{
							pHTMLWnd->scrollBy(0, 2);
							Sleep(2);
							m_nScrollSize -= 2;
						}
						m_nScrollSize=0;
					}
				}
				else
					pHTMLWnd->scrollBy(0, 1);
			}
		}
	}
	}catch(...){}

	try{
	if(pHTMLWnd!=NULL)	pHTMLWnd->Release();
	if(pHTMLDoc!=NULL)	pHTMLDoc->Release();
	if(pDisp!=NULL)		pDisp->Release();
	}catch(...){}
}

//scroll horizontal page
void CGreenBrowserView::WBScrollHPage(int bLeft)
{
	CGreenBrowserView* pvw = this;
	if(pvw->m_bToClose)
		return;

	LPDISPATCH pDisp = NULL;
	IHTMLDocument2 *pHTMLDoc = NULL;
	IHTMLWindow2 *pHTMLWnd = NULL;

	try{
	pDisp = pvw->GetHtmlDocument();
	if( pDisp )
	{
		if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
		{
			if(SUCCEEDED(pHTMLDoc->get_parentWindow( &pHTMLWnd )))
			{
				CRect	rect;
				pvw->m_wndBrowser.GetWindowRect(&rect);
				if (bLeft)
					pHTMLWnd->scrollBy(-(long)(rect.Width()*0.87),0);
				else
					pHTMLWnd->scrollBy((long)(rect.Width()*0.87),0);
			}
		}
	}
	}catch(...){}

	try{
	if(pHTMLWnd!=NULL)	pHTMLWnd->Release();
	if(pHTMLDoc!=NULL)	pHTMLDoc->Release();
	if(pDisp!=NULL)		pDisp->Release();
	}catch(...){}
}

void CGreenBrowserView::WBScrollBy(long xpos,long ypos)
{
	CGreenBrowserView* pvw = this;
	if(pvw->m_bToClose)
		return;

	LPDISPATCH pDisp = NULL;
	IHTMLDocument2 *pHTMLDoc = NULL;
	IHTMLWindow2 *pHTMLWnd = NULL;

	try{
	pDisp = pvw->GetHtmlDocument();
	if( pDisp )
	{
		if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
		{
			if(SUCCEEDED(pHTMLDoc->get_parentWindow( &pHTMLWnd )))
				pHTMLWnd->scrollBy(xpos,ypos);
		}
	}
	}catch(...){}

	try{
	if(pHTMLWnd!=NULL)	pHTMLWnd->Release();
	if(pHTMLDoc!=NULL)	pHTMLDoc->Release();
	if(pDisp!=NULL)		pDisp->Release();
	}catch(...){}
}

void CGreenBrowserView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	try{
	if(nIDEvent == m_nScrollTimer && (m_bUseAutoScroll || pmf->m_bAllScroll))
	{
		if(m_nLastScrSpd<STOP_TIMER)
			WBScroll();
		//update scroll speed
		if(pmf->m_bMouseCtrlScrSpeed)
		{
			CPoint mousept;
			GetCursorPos(&mousept);
			ScreenToClient(&mousept);
			CRect rect;
			GetWindowRect(&rect);
			if(mousept.x<=rect.Width() && mousept.x>=rect.Width()-pmf->m_nScrollWidth)
			{
				if(mousept.y<=rect.Height()-pmf->m_nScrollArrowH && mousept.y>0)
				{
					int sp = 100 - mousept.y*100/(rect.Height()-pmf->m_nScrollArrowH)+1;
					if(abs(sp-m_nLastScrSpd)>5)
						ChangeSpeed(sp);
				}
				else
					ChangeSpeed(STOP_TIMER);
			}
			else
				ChangeSpeed(STOP_TIMER);
		}

	}
	else if(nIDEvent == m_nAutoRefreshTimer && m_bUseAutoRef)
	{
		if (!m_bIsActive || pmf->m_bAutoRefreshActive)
			PowerRefresh();
	}
	CFixedHtmlView::OnTimer(nIDEvent);
	}catch(...){}
}

void CGreenBrowserView::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	try{
	CFixedHtmlView::OnClose();
	}catch(...){}
}

void CGreenBrowserView::ChangeProperty()
{
	try{
	m_dwPropertyDefault = m_dwProperty;
	IOleControl* poc;
	LPDISPATCH pDisp = GetHtmlDocument();
	if(pDisp != NULL)
	{
		if(SUCCEEDED(pDisp->QueryInterface(IID_IOleControl, (void**)&poc)))
		{
			poc->OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
			poc->Release();
		}
		pDisp->Release();
	}
	}catch(...){}
}

void CGreenBrowserView::OnToolsAutoref() 
{
	// TODO: Add your command handler code here
	m_bUseAutoRef = !m_bUseAutoRef;

	//start to scroll
	if(!m_nAutoRefreshTimer && m_bUseAutoRef && m_nRefreshInterval!=0)
	{
		m_nAutoRefreshTimer = SetTimer(3132+rand()/500, (UINT)(m_nRefreshInterval*1000), NULL);
	}
	else if(!m_bUseAutoRef && m_nAutoRefreshTimer)
	{
		if(m_nAutoRefreshTimer)
			KillTimer(m_nAutoRefreshTimer);
		m_nAutoRefreshTimer = 0;
	}	
}

void CGreenBrowserView::OnUpdateToolsAutoref(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bUseAutoRef);
}

void CGreenBrowserView::OnToolsReffre() 
{
	// TODO: Add your command handler code here
	CSetRefIntervalDlg dlg;
	dlg.m_nRefInt = m_nRefreshInterval;
	if(dlg.DoModal() == IDOK)
	{
		m_nRefreshInterval = dlg.m_nRefInt;
		pmf->m_nDefRefreshInterval = m_nRefreshInterval;
		//change timer
		if(m_bUseAutoRef)
			ChangeRefresh();
	}
}

void CGreenBrowserView::ChangeRefresh()
{
	if(m_nAutoRefreshTimer)
	{		//stop the timer;
		KillTimer(m_nAutoRefreshTimer);
		m_nAutoRefreshTimer = 0;
	}
	//start to scroll
	if(!m_nAutoRefreshTimer && m_bUseAutoRef && m_nRefreshInterval!=0)
	{
		m_nAutoRefreshTimer = SetTimer(3132, (UINT)(m_nRefreshInterval*1000), NULL);
	}
}

void CGreenBrowserView::OnNavigateComplete2(LPCTSTR lpszURL)
{
	try
	{
		CString strUrl;
		CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
		GetLocationURL(strUrl);
		
		if(!m_bToClose && ((m_bIsPopUp && m_bIsNewPopup) || (tcf!=NULL && !tcf->IsWindowVisible())) && !strUrl.IsEmpty())
		{
			CString url2 = strUrl.Right(m_strPossibleURL.GetLength()+13);
			if((pmf->IsWindowVisible() && tcf!=NULL && !tcf->IsWindowVisible()) || url2 == "navcancl.htm#" + m_strPossibleURL /*for IE 5*/|| strUrl == "about:NavigationCanceled" /*for IE4*/ || strUrl==m_strPossibleURL)
			{
				if(tcf!=NULL) 
				{
					tcf->PostMessage(WM_CLOSE);
					m_bToClose = TRUE;
				}
				m_bIsPopUp = FALSE;
			}
		}
		//
		try
		{	
			//security flag
			if(!m_bToClose)
			{
				g_bVerbose = TRUE;
				if(strUrl.Left(5)=="https")
				{
					LPDISPATCH pDisp = NULL;
					IHTMLDocument2 *pHTMLDoc = NULL;
					BSTR p;
					
					try
					{
						pDisp = GetHtmlDocument();
						if( pDisp )
							pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc);
						else
							m_bIsSecure = FALSE;
						if(pHTMLDoc)
						{
							if(SUCCEEDED(pHTMLDoc->get_protocol( &p )))
							{
								CString s(p);
								if(s=="HyperText Transfer Protocol with Privacy" || s.Find("私人验证")>0 || s.Find("玂盞")>0)
									m_bIsSecure = TRUE;
								else
									m_bIsSecure = FALSE;
								SysFreeString(p);
							}
						}

⌨️ 快捷键说明

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