📄 greenbrowserview.cpp
字号:
// 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 + -