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

📄 greenbrowserview.cpp

📁 用VC写的浏览器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// GreenBrowserView.cpp : implementation of the CGreenBrowserView class
//
#include "stdafx.h"
#include "GreenBrowser.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include <wininet.h>

#include <Mshtmdid.h>
#include "GreenBrowserView.h"
#include "mshtml.h"
#include "SetRefIntervaldlg.h"

#include <mmsystem.h> //for sndplaysound
#include "SortSaveDlg.h"

//####################################################
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//####################################################
#define FN_LEN		220 //file name length
#define POP_DELAY	pmf->m_nPopDelay
#define MG_LEN		9 //mouse gesture len

//####################################################
#define CAN_ACTIVE(tcf)		(!(tcf->m_nActive&INW_INACTIVE) && (pmf->m_bActiveNewWindow || tcf->m_bForceActive))

//####################################################
char g_cGestureStack[MG_LEN], g_cGestureString[MG_LEN];
int g_nGestureHead, g_nGestureTail;

//####################################################
/////////////////////////////////////////////////////////////////////////////
// CGreenBrowserView

IMPLEMENT_DYNCREATE(CGreenBrowserView, CFixedHtmlView)

BEGIN_MESSAGE_MAP(CGreenBrowserView, CFixedHtmlView)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
	ON_COMMAND(ID_EDIT_FIND, OnEditFind)
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
	ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
	ON_COMMAND(ID_OPTIONS_LOADIMAGE, OnOptionsLoadimage)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_LOADIMAGE, OnUpdateOptions)
	ON_COMMAND(ID_OPTIONS_ALLOWSCRIPTS, OnOptionsAllowscripts)
	ON_COMMAND(ID_OPTIONS_LOADSOUNDS, OnOptionsLoadsounds)
	ON_COMMAND(ID_OPTIONS_LOADVIDEOS, OnOptionsLoadvideos)
	ON_COMMAND(ID_OPTIONS_USE_WEBP, OnOptionsUseWebp)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_USE_WEBP, OnUpdateOptionsUseWebp)
	ON_COMMAND(ID_OPTIONS_ALLOWACTIVEX, OnOptionsAllowactivex)
	ON_COMMAND(ID_OPTIONS_ALLOWJAVAAPPLET, OnOptionsAllowjavaapplet)
	ON_UPDATE_COMMAND_UI(ID_GO_BACK, OnUpdateGoBack)
	ON_UPDATE_COMMAND_UI(ID_GO_FORWARD, OnUpdateGoForward)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWSCRIPTS, OnUpdateOptions)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_LOADSOUNDS, OnUpdateOptions)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_LOADVIDEOS, OnUpdateOptions)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWACTIVEX, OnUpdateOptions)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWJAVAAPPLET, OnUpdateOptions)
	ON_WM_SIZE()
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_LARGEST, OnUpdateViewFonts)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_LARGE, OnUpdateViewFonts)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_MEDIUM, OnUpdateViewFonts)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_SMALL, OnUpdateViewFonts)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_SMALLEST, OnUpdateViewFonts)
	//{{AFX_MSG_MAP(CGreenBrowserView)
	ON_WM_PARENTNOTIFY()
	ON_WM_TIMER()
	ON_WM_CLOSE()
	ON_COMMAND(ID_TOOLS_AUTOREF, OnToolsAutoref)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOREF, OnUpdateToolsAutoref)
	ON_COMMAND(ID_TOOLS_REFFRE, OnToolsReffre)
	ON_COMMAND(ID_FILE_SAVEHTML, OnFileSavehtml)
	ON_WM_RBUTTONUP()
	ON_COMMAND(ID_FILE_PRINT_SETUP, OnFilePrintSetup)
	ON_COMMAND(ID_FILE_PROPERTY, OnFileProperty)
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_FILE_AUTOSAVE, OnFileAutoSave)
	ON_WM_LBUTTONUP()
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_PAGE0, OnUpdateToolsAutoscrollPage)
	ON_COMMAND(ID_VIEW_PAGESIZE_ADD10, OnViewPagesizeAdd10)
	ON_COMMAND(ID_VIEW_PAGESIZE_100, OnViewPagesize100)
	ON_COMMAND(ID_VIEW_PAGESIZE_200, OnViewPagesize200)
	ON_COMMAND(ID_VIEW_PAGESIZE_50, OnViewPagesize50)
	ON_COMMAND(ID_VIEW_PAGESIZE_DEC10, OnViewPagesizeDec10)
	ON_COMMAND(ID_FILE_IMPORT_EXPORT, OnFileImportExport)
	ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveAs)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_PAGE1, OnUpdateToolsAutoscrollPage)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_PAGE2, OnUpdateToolsAutoscrollPage)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_PAGE4, OnUpdateToolsAutoscrollPage)
	ON_COMMAND(ID_FILE_AUTOSAVE_SORT, OnFileAutoSaveSort)
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_GO_BACK, OnGoBack)
	ON_COMMAND(ID_GO_FORWARD, OnGoForward)
	ON_COMMAND(ID_TOOLS_AUTOSCROLL_AUTOSCROLLINGAFTERDOWNLOADING, OnToolsAutoscrollAutoscrollingafterdownloading)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_AUTOSCROLLINGAFTERDOWNLOADING, OnUpdateToolsAutoscrollAutoscrollingafterdownloading)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_FAST, OnUpdateToolsAutoscrollSpeed)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_MEDIUM, OnUpdateToolsAutoscrollSpeed)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_SLOW, OnUpdateToolsAutoscrollSpeed)
	ON_COMMAND(ID_TOOLS_AUTOSCROLL_USEAUTOSCROLLING, OnToolsAutoscrollUseautoscrolling)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_USEAUTOSCROLLING, OnUpdateToolsAutoscrollUseautoscrolling)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGreenBrowserView construction/destruction
void CGreenBrowserView::SetSpecialProperty(DWORD dwNewProperty)
{
	m_dwProperty = dwNewProperty;
	ChangeProperty();
	m_bSpecialProperty = true;
}

void CGreenBrowserView::SetDefaultProperty()
{
	m_dwProperty = m_dwPropertyDefault;
}

void CGreenBrowserView::SetFullProperty()
{
	m_dwProperty = 0;
	m_dwProperty |= DLCTL_DLIMAGES|DLCTL_VIDEOS|DLCTL_BGSOUNDS;
	m_dwProperty &= ~DLCTL_NO_SCRIPTS|~DLCTL_NO_JAVA|~DLCTL_NO_RUNACTIVEXCTLS;
}

CGreenBrowserView::CGreenBrowserView()
{
	// TODO: add construction code here
	m_bAutoPopWin = FALSE;
	//
	m_bIsPopUp = FALSE;
	m_nFilterDup = 0;
	m_bEnWebProxy = FALSE;
	m_bIsCapture = FALSE;
	m_bIsActive = FALSE;
	m_bReUsed = FALSE;
	m_bBack= FALSE;
	m_bForward = FALSE;
	m_nProgress = -1;
	m_bIsNewPopup = FALSE;
	m_bDelayAdd = TRUE;
	m_nDupID = -1;
	m_bToClose = FALSE;
	m_bIsSecure = FALSE;
	m_nFontSize = g_nDefFontSize; //4, smallest, 3, small, 2, medium, 1, large, 0, largest

	m_dwPropertyDefault = m_dwProperty = pmf->m_dwDefaultProperty;

	m_bForceRefresh = FALSE;
	m_bFirst = TRUE;
	m_nSrSpeed = 1; //1-slow, 2-medium, 3-fast
	m_bScrollAfterDL = TRUE;
	m_bUseAutoScroll = FALSE;
	m_nScrollTimer = 0;
	m_nOldIcon = -1;
	m_nCurHistory = -1;
	m_nHistoryLength = 0;
	m_ptLClick.x=0;
	m_ptLClick.y = 0;
	m_ptRClick.x=0;
	m_ptRClick.y=0;

	g_nGestureHead = 0;
	g_nGestureTail = 0;

	m_nAutoRefreshTimer = 0;
	m_bUseAutoRef = FALSE;
	m_nRefreshInterval = pmf->m_nDefRefreshInterval;
	//
	m_nScrollSize = 0;
	m_bSpecialProperty = false;
	m_strFindKey = "";
	m_bFindPrev = 0;
	m_bHighLighted = 0;
	m_strHighLightKey = "";
	m_bSortSave = false;
	m_bForbidAutoNavigate = false;
	m_nInNewWindow = 0;
	//
	m_strOpenNewUrl.Empty();
	m_nAutoRunCmd = 0;
}

CGreenBrowserView::~CGreenBrowserView()
{
	try{
	if(m_nScrollTimer)
		KillTimer(m_nScrollTimer);
	if(m_nAutoRefreshTimer)
		KillTimer(m_nAutoRefreshTimer);
	}catch(...){}
}

BOOL CGreenBrowserView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	try{
    cs.lpszClass = AfxRegisterWndClass(
       CS_DBLCLKS,                       // if you need double-clicks
       NULL,                             // no cursor (use default)
       NULL,                             // no background brush
       NULL); // app icon
    ASSERT(cs.lpszClass);
	}catch(...){}

	return CFixedHtmlView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CGreenBrowserView drawing

void CGreenBrowserView::OnInitialUpdate(int nOpenType, LPCSTR strUrl)
{
	try
	{
		m_bFirst = TRUE;
		CFixedHtmlView::OnInitialUpdate();
		if (nOpenType == 1)// && pmf->m_strHomePage.GetLength())
			GoHome();
		else if (nOpenType == 2)
		{
			if(strUrl!=NULL && strUrl!="")
			{
				Navigate2(strUrl, 0, NULL);
				m_lpszUrl = strUrl;
			}
			else
			{
				m_lpszUrl = "about:blank";
				Navigate2(m_lpszUrl, 0, NULL);
			}
		}
		else
		{
			m_lpszUrl = "about:blank";
			Navigate2(m_lpszUrl, 0, NULL);
		}
		m_strWebProxy = pmf->m_strDefaultWebProxy;
	}catch(...){}
}

/////////////////////////////////////////////////////////////////////////////
// CGreenBrowserView diagnostics

#ifdef _DEBUG
void CGreenBrowserView::AssertValid() const
{
	CFixedHtmlView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CGreenBrowserView message handlers
void CGreenBrowserView::OnTitleChange(LPCTSTR lpszText)
{
	try{
	CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
	if(tcf!=NULL)
	{
		if (!pmf->m_bForbidMainTitle)
		{
			if(tcf->m_strStickName != "")
			{
				tcf->SetWindowText(tcf->m_strStickName);
			}
			else
			{
				tcf->SetWindowText(lpszText);
			}
		}
		tcf->m_strTitle = lpszText;
	}

	CString url("");
	//need pay attention!
	try{
	GetLocationURL(url);
	}catch(...){}

	BOOL bSetAddress = TRUE;
	if(!url.IsEmpty())
	{
		if(m_lpszUrl == url)
			bSetAddress = FALSE;
		else
			m_lpszUrl = url;
		//for history
		if(m_pITravelLog == NULL)
			SetHistory(url);
	}
	else
		bSetAddress = FALSE;
	if(m_pITravelLog == NULL && strlen(lpszText)>0)
		m_strLastTitle = lpszText;

	if(pmf!=NULL)
	{
		//set the new title of tab
		if(tcf->m_strStickName=="")
		{
			int nTabID = pmf->FindTab(tcf);
			if (g_bShowIndex)
			{
				CString strTitle;
				strTitle.Format("%d-%s",nTabID+1,lpszText);
				pmf->SetTabTitle( strTitle, nTabID );
			}
			else
				pmf->SetTabTitle( lpszText, nTabID );
		}
		if(bSetAddress && m_bIsActive)
		{
			pmf->SetAddress(url);
		}
		//update tab bar
		if(!pmf->m_bAutoTab)
			pmf->PostMessage(WM_UPDATE_TAB);
	}
	}catch(...){}
}

void WBShowScrollBar(CGreenBrowserView* pvw)
{
	try
	{
		LPDISPATCH pDisp = NULL;
		IHTMLDocument2 *pHTMLDoc = NULL;
		IHTMLElement * pHTMLElem = NULL;
		IHTMLBodyElement *pHTMLBody = NULL;
		try
		{
			pDisp = pvw->GetHtmlDocument();
			if( pDisp )
			{
				if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
				{
					if(SUCCEEDED(pHTMLDoc->get_body( &pHTMLElem )))
					{
						if (SUCCEEDED(pHTMLElem->QueryInterface(IID_IHTMLBodyElement, (void**)&pHTMLBody)))
						{
							pHTMLBody->put_scroll(g_bstrYes);
						}
					}
				}
			}
		}catch(...){}

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

void CGreenBrowserView::OnDocumentComplete(LPCTSTR lpszUrl)
{
	// make sure the main frame has the new URL.  This call also stops the animation
	try
	{
		CString strUrl;
		GetLocationURL(strUrl);
		if(strUrl.IsEmpty() && lpszUrl!=NULL)
			strUrl = lpszUrl;
		//the strUrl maybe empty
		if (strUrl.GetLength())
			m_lpszUrl = strUrl;
		CString strUrlNew = pmf->GetStandUrl(strUrl);
		
		//filter popup, //strUrlNew==m_lpszUrl => the url maybe the frame in the page
		if(g_bKillPop && !m_bToClose && !m_bIsPopUp && pmf!=NULL && g_bKillListWin && !strUrl.IsEmpty() && strUrlNew==m_lpszUrl) 
		{
			if (pmf->NeedPopFilter(strUrlNew))
			{
				if (pmf->ConfirmPopupFilter(strUrlNew, FALSE))
				{
					m_bIsPopUp = TRUE;
					m_strPossibleURL = strUrlNew;
					m_nProgress = -10;
					CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
					if(tcf!=NULL)
					{
						m_bToClose = TRUE;
						tcf->PostMessage(WM_CLOSE);
						//add counter
						pmf->AddToPopList(strUrlNew, 2);
						return;
					}
				}
			}
		}
		
		if(m_pDisp == NULL) //means document complete
		{
			m_nProgress = -10;			
			if(m_bIsActive && pmf!=NULL && !strUrl.IsEmpty())
			{
				//((CMainFrame*)((CChildFrame*)GetParentFrame()->GetParentFrame()))->SetAddress(strUrl);
				BOOL bModified=FALSE;
				if (pmf->m_bBlankMonitorClip)
				{
					if (strUrl == "about:blank")
					{
						CString str = _GetClipString();
						if (str.GetLength())
						{
							//1:only url 2:url and text
							if (pmf->m_bBlankMonitorClip==2 || IS_URL(str))
							{
								pmf->m_wndAddress->SetWindowText(str);
								bModified = TRUE;
							}
						}
					}
				}
				if (!bModified)
					pmf->SetAddress(strUrl);
				g_nPercent= -1;	
			}
			//set icon
			if((m_nProgress>95 || m_nProgress<0))//3.2 && !strUrl.IsEmpty()
			{
				CChildFrame* tcf = (CChildFrame*)GetParentFrame();
				int nTabID = pmf->FindTab(tcf);
				int oi = m_nOldIcon;
				if(m_bIsActive)
				{
					if(tcf->m_bLock)
						pmf->SetTabIcon( TI_LOCK, nTabID, this);
					else if(tcf->m_bProtect)
						pmf->SetTabIcon( TI_PROTECT, nTabID, this);
					else if (m_nOldIcon!=TI_0)
						pmf->SetTabIcon( TI_NO, nTabID, this);
					//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))
						{
							//						m_nScrollTimer = SetTimer(2132, (UINT)(1000*g_fSeed/m_nSrSpeed), NULL);
							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_lpszUrl != "about:blank")//3.3.6
					pmf->SetTabIcon( TI_100, nTabID, this );
				//update tab bar tab0
				if(pmf->m_nTabStyle==2)
					pmf->PostMessage(WM_UPDATE_TAB);
			}
			//restore homepage
			if(g_bLockHomepage)
			{
				CString strHomePage = pmf->GetHomePage();
				if (strHomePage != pmf->m_strHomePage)
				{
					if (strHomePage == "about:blank")//user may set blank in other place
						pmf->m_strHomePage = strHomePage;
					else
						pmf->SetHomePage(pmf->m_strHomePage);
				}
			}
			//better place here, here means the main page complete
			//need run plugin on blank page,for example close right page
			if (pmf->m_bAutoRunExternal && !m_bExternalRunOK)
			{
				pmf->RunSelectedExternal((CChildFrame*)GetParentFrame(),TRUE);
				m_bExternalRunOK = TRUE;
			}
			//better place here, some page reload image will cause OnProgrssChange
			if (m_lpszUrl!="about:blank")
			{
				if (pmf->m_bReloadUnShownImage)
					pmf->RunReloadUnloadImage((CChildFrame*)GetParentFrame());
			}
			if (m_nAutoRunCmd)
			{
				//must active the page, some command only run for active page
				pmf->MDIActivate(GetParentFrame());

⌨️ 快捷键说明

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