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

📄 myieview.cpp

📁 myie的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					else
						oldIcon = ((CMainFrame*)pMainFrame)->SetTabIcon( -1, nTabID );

					//start to scroll
					if(!m_nScrollTimer && m_bUseAutoScroll && m_nSrSpeed!=0)
					{
						if(m_nProgress==100 || m_nProgress<0 || (!m_bScrollAfterDL && m_nProgress>=20))
						{
	//						m_nScrollTimer = SetTimer(2132, (UINT)(1000*gSeed/m_nSrSpeed), NULL);
							m_nScrollTimer = SetTimer(2132, (UINT)((26 + gSeed * 100)/m_nSrSpeed), NULL);
						}
					}

				}
				else
					oldIcon = ((CMainFrame*)pMainFrame)->SetTabIcon( 5, nTabID );
				//update tab bar
				pMainFrame->PostMessage(WM_UPDATE_TAB);
			}

			//mutex
	//		ReleaseMutex(m_hMutex);
		}

		//restore homepage
		if(bLockHomepage)
		{
			pMainFrame->GetHomePage(pMainFrame->m_strCurHome);
			if(strcmp(pMainFrame->m_strHome, pMainFrame->m_strCurHome)!=0)
				pMainFrame->SetHomePage(pMainFrame->m_strHome);
		}
	}

	//scroll bar and background
	try{
		if(!strUrl.IsEmpty() && m_IsNewPopup &&(m_nProgress==100 || m_nProgress<0))
		{
			WBShowScrollBar(this);
		}

		if(bAutoSetBG)
		{
			VARIANT color;
			color.vt = VT_BSTR;
			color.bstrVal = ((CMainFrame*)pMainFrame)->m_strBGColor.AllocSysString();

			((CMainFrame*)pMainFrame)->SetBackground(this, color);
			SysFreeString(color.bstrVal);
		}
	}
	catch(...)
	{
	}

	}
	catch(...)
	{
//		AfxMessageBox("doc complete error");
		//2.0
/*		m_nProgress = -1;
		if(IsActive)
		{
			percent= -1;	
		}*/
	}
}


void CMyIEView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD /*nFlags*/,
	LPCTSTR lpszTargetFrameName, BOOL baPostedData,
	LPCTSTR /*lpszHeaders*/, BOOL* pbCancel)
{
	//open in new window
	//get time
	LARGE_INTEGER liFinish;
	LARGE_INTEGER liFreq;
	BOOL bCanNew = FALSE;
	TCITEM TabCtrlItem;
	try
	{
	CChildFrame* tcf = (CChildFrame*)GetParentFrame();
	CMainFrame* mf = (CMainFrame*)(tcf->GetParentFrame());

	BOOL bLock = FALSE;
	if(tcf!=NULL)
		bLock = tcf->bLock;

	if((bLinkInNewWindow || bLock) && m_tLastClick.LowPart != 0 && !baPostedData)//2.5.GetSize()==0
	{
		QueryPerformanceCounter(&liFinish);
		QueryPerformanceFrequency(&liFreq);
		if(liFreq.LowPart!=0)
		{
			double secs = (double)(liFinish.LowPart - m_tLastClick.LowPart)/(double)liFreq.LowPart;
			if(secs<0.6 && secs>0)
			{
				int dup = ((CMainFrame*)pMainFrame)->FindDupURL(lpszURL, tcf);
				if(dup<0)
					bCanNew = TRUE;
				else
				{
					*pbCancel = TRUE;
					if(mf!=NULL && mf->m_bActiveNewWindow)
					{
						TabCtrlItem.mask = TCIF_PARAM;

						mf->m_wndTab.GetItem(dup, &TabCtrlItem);
						CChildFrame* tcf2 = (CChildFrame*)TabCtrlItem.lParam;
						if(tcf2!=NULL && tcf2!=tcf)
						{
							mf->MDIActivate(tcf2);
							//((CMainFrame*)pMainFrame)->m_wndTab.SetCurSel(m_nDupID);
						}
					}
				}
			}
			else
				m_tLastClick.LowPart = 0;
		}
	}


	if(!m_bFirst && (bLinkInNewWindow || bLock) && pMainFrame!=NULL && bCanNew)
	{
		char* pdest = strchr(lpszURL, '#');
		if(pdest!=NULL)
		{
			if(strncmp(lpszURL, m_lpszUrl, pdest - lpszURL)!=0)
				pdest = NULL;
		}
		if(strstr(lpszURL, "mailto:")==NULL && strstr(lpszURL, "javascript:")==NULL && pdest == NULL )
		{
			CWinApp* pApp = AfxGetApp();
			CChildFrame *pWnd = NULL;
			if(pApp==NULL)
				return;
			pWnd = ((CMainFrame*)pApp->m_pMainWnd)->NewChildWindow(0,1, NULL, this);
			if(pWnd != NULL)
			{
				pWnd->m_pView->dwProperty = dwProperty;

				pWnd->m_pView->m_IsNewPopup = FALSE; //TRUE;
				
				pWnd->m_pView->m_bFirst = TRUE;
				pWnd->m_pView->m_nProgress = 0;

				pWnd->m_pView->ToNavigate(lpszURL);

				if(pbCancel!=NULL)
					*pbCancel = TRUE;

				return;
			}
		}

	}

	m_bFirst = FALSE;

	m_bForceRefresh =  FALSE;

	//secure info
	if(strncmp(lpszURL, "https", 5)!=0)
		m_bIsSecure = FALSE;

	if(IsActive && pMainFrame!=NULL)
		((CMainFrame*)pMainFrame)->m_bIsSecure = m_bIsSecure;


	//filter popup
	if(pMainFrame!=NULL && lpszURL!=NULL && EnablePopupFilter && strcmp(lpszURL, "about:blank")!=0)
	{
		//mutex
//		WaitForSingleObject(m_hMutex, INFINITE);
//2.2 m_IsNewPopup && 
		if((((CMainFrame*)pMainFrame)->m_astrPopup.Find(lpszURL)!=NULL || PopFilterStar(lpszURL)))
		{
			if(pbCancel!=NULL)
				*pbCancel = TRUE;
			IsPopUp = TRUE;
			m_strPossibleURL = lpszURL;
			m_nProgress = -1;
		}
		else
		{
			m_nProgress = 0;
			if(IsActive)
			{	
				percent = m_nProgress;
			}
		}

	}
	

	//2.3 329 filter duplicate url
	if(EnableDupFilter && m_nFilterDup && !IsPopUp && m_IsNewPopup && pMainFrame!=NULL && lpszURL!=NULL && strcmp(lpszURL, "about:blank")!=0)
	{
		//mutex
//		WaitForSingleObject(m_hMutex, INFINITE);
		//only filter once the window popup
		m_nFilterDup --;
		int dup = ((CMainFrame*)pMainFrame)->FindDupURL(lpszURL, tcf);
		if(dup>=0)
		{
			if(pbCancel!=NULL)
				*pbCancel = TRUE;
			IsPopUp = TRUE;
			m_strPossibleURL = lpszURL;
			m_nDupID = dup;
			m_nProgress = -1;
			m_nFilterDup = 0;

			//active that dup window
			if(m_bReUsed && tcf!=NULL && mf!=NULL && (mf->m_bActiveNewWindow || tcf->m_bForceActive))
			{
			//	TCITEM TabCtrlItem;
				TabCtrlItem.mask = TCIF_PARAM;

				((CMainFrame*)pMainFrame)->m_wndTab.GetItem(m_nDupID, &TabCtrlItem);
				CChildFrame* tcf2 = (CChildFrame*)TabCtrlItem.lParam;
				if(tcf2!=NULL && tcf2!=tcf)
				{
					((CMainFrame*)pMainFrame)->MDIActivate(tcf2);
					//((CMainFrame*)pMainFrame)->m_wndTab.SetCurSel(m_nDupID);
				}

				m_nDupID = -1;
			}

		}
		else
		{
			m_nProgress = 0;
			if(IsActive)
			{	
				percent = m_nProgress;
			}
		}

	}


/*	if(bDelayAdd && m_IsNewPopup && !IsPopUp && tcf!=NULL)
	{
	//resize
/*		CRect rect, oldrect;
		m_wndBrowser.GetWindowRect(&oldrect);
		GetParentFrame()->GetClientRect(&rect);
		rect.left-=2;
		rect.top-=2;
		rect.right +=2;
		rect.bottom +=2;
		if(oldrect.Width()!=rect.Width() || oldrect.Height()!=rect.Height())
		{
			m_wndBrowser.MoveWindow(rect);
		}* /
		try{
		CRect rect;
		tcf->GetClientRect(&rect);
		rect.left-=2;
		rect.top-=2;
		rect.right +=2;
		rect.bottom +=2;
		//m_wndBrowser.MoveWindow(rect);
		SendMessage(WM_SIZE,  0, ((rect.Height())<<16)+rect.Width());
		}catch(...)
		{
		}
	}*/

	//mutex
//	WaitForSingleObject(m_hMutex, INFINITE);
	//reused window
	if(!IsPopUp && m_bReUsed && tcf!=NULL && mf!=NULL && (mf->m_bActiveNewWindow || tcf->m_bForceActive))
	{
		int nTabID = mf->FindTab(tcf);
		//active window
		mf->MDIActivate(tcf);
		//select current tab
		mf->m_wndTab.SetCurSel( nTabID );
			
		tcf->m_bForceActive = FALSE;

	}
	m_bReUsed = FALSE;

	//Add a tab to tabbar
	if(!IsPopUp && bDelayAdd && tcf!=NULL && mf!=NULL)
	{
		tcf->ShowWindow(SW_SHOW);

		bDelayAdd = FALSE;


		//add tab
		mf->AddNewTab(tcf);

		int nTabID = mf->FindTab(tcf);
		//active window
		if(mf->m_bActiveNewWindow || tcf->m_bForceActive)
		{
			mf->MDIActivate(tcf);
			//select current tab
			mf->m_wndTab.SetCurSel( nTabID );
			
			tcf->m_bForceActive = FALSE;
		}

		//set icon
		oldIcon = mf->SetTabIcon( 0, nTabID );

		//update tab bar
		mf->PostMessage(WM_UPDATE_TAB);
//		bUpdateTab = TRUE;
		mf->PostMessage(WM_UPDATE_TAB_TIP);
	}

	}
/*	catch(CMemoryException* e)
	{
//		AfxMessageBox("before nav error");
		if(e!=NULL)e->Delete();
	}*/
	catch(...)
	{
	}
}

// these are all simple one-liners to do simple controlling of the browser
void CMyIEView::OnGoBack()
{
	if(m_back)
		GoBack();
}

void CMyIEView::OnGoForward()
{
	if(m_forward)
		GoForward();
}

void CMyIEView::OnGoStartPage()
{
	GoHome();
}



// these functions control the font size.  There is no explicit command in the
// CFixedHtmlView class to do this, but we can do it by using the ExecWB() function.
/*void CMyIEView::OnViewFontsLargest()
{
	nDefFontSize = m_nFontSize = 0;
	COleVariant vaZoomFactor(4l);

	ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
		   &vaZoomFactor, NULL);

}

void CMyIEView::OnViewFontsLarge()
{
	nDefFontSize = m_nFontSize = 1;

	COleVariant vaZoomFactor(3l);

	ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
		   &vaZoomFactor, NULL);

}

void CMyIEView::OnViewFontsMedium()
{
	nDefFontSize = m_nFontSize = 2;
	COleVariant vaZoomFactor(2l);

	ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
		   &vaZoomFactor, NULL);

}

void CMyIEView::OnViewFontsSmall()
{
	nDefFontSize = m_nFontSize = 3;

	COleVariant vaZoomFactor(1l);

	ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
		   &vaZoomFactor, NULL);

}

void CMyIEView::OnViewFontsSmallest()
{
	nDefFontSize = m_nFontSize = 4;
	COleVariant vaZoomFactor(0l);

	ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
		   &vaZoomFactor, NULL);

}
*/

void CMyIEView::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel) 
{
	// TODO: Add your specialized code here and/or call the base class

	CChildFrame *pWnd = NULL;

	if(ppDisp == NULL || Cancel == NULL)
		return;

	//mutex
//	WaitForSingleObject(m_hMutex, INFINITE);

	try{
	*Cancel = TRUE;
	*ppDisp = NULL;

	//auto filter popup window not opened by user
	if(m_bAutoFilter)
	{
		//this window is to be closed, so don't open any other windows from it.
		if(m_bToClose)
			return;
		

		LARGE_INTEGER liFinish;
		LARGE_INTEGER liFreq;
		BSTR bstr=NULL;

		QueryPerformanceCounter(&liFinish);
		QueryPerformanceFrequency(&liFreq);
		if(liFreq.LowPart!=0)
		{
			double secs = (double)(liFinish.LowPart - m_tLastClick.LowPart)/(double)liFreq.LowPart;
			double Rsecs = (double)(liFinish.LowPart - m_tLastRClick.LowPart)/(double)liFreq.LowPart;

	//		tag = "";
			if((secs>0.7 && secs<5.0 && m_bLClick) || /*2.5*/ m_nProgress==-1)
			{
				if(m_nProgress>=0)/*2.5*/
				{
					//get click point
					IHTMLElement* pElem = NULL;
					IHTMLDocument2* pHTMLDoc=NULL;
					try{
					LPDISPATCH pDisp = GetHtmlDocument();

					if(pDisp!=NULL)
					{
						if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
						{
							if(SUCCEEDED(pHTMLDoc->elementFromPoint(m_LClickPT.x, m_LClickPT.y, &pElem)))
							{
								if(pElem!=NULL)
								{
									pElem->get_tagName(&bstr);
									pElem->Release();
								}
							}
							pHTMLDoc->Release();
						}
						pDisp->Release();
					}
					}catch(...)
					{
					}


				}
				else
				{	
					//2.5 whether browser is busy when m_mPorgress <0
					try{
						if(m_wndBrowser.GetBusy())
							m_nProgress=0;
					}catch(...)
					{
					}
				}
			}
			try{

			if(!(m_bLClick && ((secs<=0.7 && secs>=0) || (bstr!=NULL && wcscmp(bstr, L"A")==0) || /*2.5*/m_nProgress==-1)) && !((Rsecs>=0 && Rsecs<=5 && m_bRClick) ||/*2.5*/ m_nProgress==-1))
			{
				*ppDisp = NULL;
				m_bLClick = FALSE;
				//3.01 tag == "";
				if(bstr!=NULL)
					SysFreeString(bstr);
				return;
			}
			if(bstr!=NULL)
			{
					SysFreeString(bstr);
				
			}
			
			}catch(...)
			{}
		}
	}

	m_bLClick = FALSE;
//	tag == "";
	if(pMainFrame!=NULL)
		pWnd = ((CMainFrame*)pMainFrame)->NewChildWindow(0,1, NULL, this);

	//mutex
//	ReleaseMutex(m_hMutex);

	if(pWnd!=NULL)
	{
		//this maybe a blank window.
		if(((CChildFrame*)GetParentFrame())->m_pBlankChild != pWnd)
		{
			((CChildFrame*)GetParentFrame())->m_pBlankChild = pWnd;
			QueryPerformanceCounter(&((CChildFrame*)GetParentFrame())->m_tBlankChild);
		}
		else
			((CChildFrame*)GetParentFrame())->m_pBlankChild = NULL;

		pWnd->m_pView->dwProperty = dwProperty;

		pWnd->m_pView->m_IsNewPopup = TRUE;
		pWnd->m_pView->IsPopUp = FALSE;
		pWnd->m_pView->m_bToClose = FALSE;

		pWnd->m_pView->m_nFilterDup = 1;

		pWnd->m_pView->m_bForceResize = TRUE;

		pWnd->m_pView->m_nProgress = 0;
		pWnd->m_pView->m_bAutoFilter = m_bAutoFilter;

⌨️ 快捷键说明

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