📄 myieview.cpp
字号:
// MyIEView.cpp : implementation of the CMyIEView class
//
#include "stdafx.h"
#include "MyIE.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include <wininet.h>
#include <Mshtmdid.h>
//#include "MyIEDoc.h"
#include "MyIEView.h"
#include "mshtml.h"
#include "SetRefIntervaldlg.h"
#pragma optimize( "t", on )
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyIEView
IMPLEMENT_DYNCREATE(CMyIEView, CFixedHtmlView)
BEGIN_MESSAGE_MAP(CMyIEView, 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_WM_ERASEBKGND()
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(CMyIEView)
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_TOOLS_AUTOFILTER_CUR, OnToolsAutofilterCur)
ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOFILTER_CUR, OnUpdateToolsAutofilterCur)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_GO_BACK, OnGoBack)
ON_COMMAND(ID_GO_FORWARD, OnGoForward)
// ON_COMMAND(ID_GO_SEARCH_THE_WEB, OnGoSearchTheWeb)
ON_COMMAND(ID_GO_START_PAGE, OnGoStartPage)
/*ON_COMMAND(ID_HELP_WEB_TUTORIAL, OnHelpWebTutorial)
ON_COMMAND(ID_HELP_ONLINE_SUPPORT, OnHelpOnlineSupport)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_FREE_STUFF, OnHelpMicrosoftOnTheWebFreeStuff)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_FREQUENTLY_ASKED_QUESTIONS, OnHelpMicrosoftOnTheWebFrequentlyAskedQuestions)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_GET_FASTER_INTERNET_ACCESS, OnHelpMicrosoftOnTheWebGetFasterInternetAccess)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_MICROSOFT_HOME_PAGE, OnHelpMicrosoftOnTheWebMicrosoftHomePage)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_SEARCH_THE_WEB, OnHelpMicrosoftOnTheWebSearchTheWeb)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_SEND_FEEDBACK, OnHelpMicrosoftOnTheWebSendFeedback)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_INTERNET_START_PAGE, OnHelpMicrosoftOnTheWebInternetStartPage)
ON_COMMAND(ID_HELP_MICROSOFT_ON_THE_WEB_BEST_OF_THE_WEB, OnHelpMicrosoftOnTheWebBestOfTheWeb) */
// ON_COMMAND(ID_VIEW_FONTS_LARGEST, OnViewFontsLargest)
// ON_COMMAND(ID_VIEW_FONTS_LARGE, OnViewFontsLarge)
// ON_COMMAND(ID_VIEW_FONTS_MEDIUM, OnViewFontsMedium)
// ON_COMMAND(ID_VIEW_FONTS_SMALL, OnViewFontsSmall)
// ON_COMMAND(ID_VIEW_FONTS_SMALLEST, OnViewFontsSmallest)
// ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_TOOLS_AUTOSCROLL_AUTOSCROLLINGAFTERDOWNLOADING, OnToolsAutoscrollAutoscrollingafterdownloading)
ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_AUTOSCROLLINGAFTERDOWNLOADING, OnUpdateToolsAutoscrollAutoscrollingafterdownloading)
// ON_COMMAND(ID_TOOLS_AUTOSCROLL_FAST, OnToolsAutoscrollFast)
ON_UPDATE_COMMAND_UI(ID_TOOLS_AUTOSCROLL_FAST, OnUpdateToolsAutoscrollSpeed)
// ON_COMMAND(ID_TOOLS_AUTOSCROLL_MEDIUM, OnToolsAutoscrollMedium)
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()
/////////////////////////////////////////////////////////////////////////////
// CMyIEView construction/destruction
CMyIEView::CMyIEView()
{
// TODO: add construction code here
IsPopUp = FALSE;
dwProperty = 0;
m_nFilterDup = 0;
m_bEnWebProxy = FALSE;
IsActive = FALSE;
m_bReUsed = FALSE;
m_back= FALSE;
m_forward = FALSE;
m_nProgress = -1;
m_IsNewPopup = FALSE;
bDelayAdd = TRUE;
m_nDupID = -1;
m_bToClose = FALSE;
m_bIsSecure = FALSE;
m_nFontSize = nDefFontSize; //4, smallest, 3, small, 2, medium, 1, large, 0, largest
//load internet setting
HKEY hKey;
TCHAR sz[MAX_PATH];
DWORD dwSize = MAX_PATH;
if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Main"), &hKey) != ERROR_SUCCESS)
{
TRACE0("Main setting not found\n");
return ;
}
dwSize = sizeof(sz);
RegQueryValueEx(hKey, _T("Display Inline Images"), NULL, NULL, (LPBYTE)sz, &dwSize);
if(strcmp(sz, "yes")==0)
dwProperty |=DLCTL_DLIMAGES;
dwSize = MAX_PATH;
RegQueryValueEx(hKey, _T("Display Inline Videos"), NULL, NULL, (LPBYTE)sz, &dwSize);
if(strcmp(sz, "yes")==0)
dwProperty |=DLCTL_VIDEOS;
dwSize = MAX_PATH;
RegQueryValueEx(hKey, _T("Play_Background_Sounds"), NULL, NULL, (LPBYTE)sz, &dwSize);
if(strcmp(sz, "yes")==0)
dwProperty |=DLCTL_BGSOUNDS;
RegCloseKey(hKey);
if(AfxGetApp()->GetProfileInt("Settings", "NoJava", 0))
dwProperty |= DLCTL_NO_JAVA;
if(AfxGetApp()->GetProfileInt("Settings", "NoActivex", 0))
dwProperty |= DLCTL_NO_RUNACTIVEXCTLS;
if(AfxGetApp()->GetProfileInt("Settings", "NoScript", 0))
dwProperty |= DLCTL_NO_SCRIPTS;
//keep silent???
// if(bSilent)
// dwProperty |= DLCTL_SILENT;
m_bForceRefresh = FALSE;
m_bFirst = TRUE;
m_nSrSpeed = 1; //1-slow, 2-medium, 3-fast
m_bScrollAfterDL = TRUE;
m_bUseAutoScroll = FALSE;
m_nScrollTimer = 0;
oldIcon = -1;
m_nCurHistory = -1;
m_nHistoryLength = 0;
m_bAutoFilter = EnableAutoFilter;
m_LClickPT.x=0;
m_LClickPT.y = 0;
m_nAutoRefreshTimer = 0;
m_bUseAutoRef = FALSE;
if(pMainFrame!=NULL)
m_nRefreshInterval = ((CMainFrame*)pMainFrame)->m_nDefRefreshInterval;
}
CMyIEView::~CMyIEView()
{
try{
if(m_nScrollTimer)
KillTimer(m_nScrollTimer);
if(m_nAutoRefreshTimer)
KillTimer(m_nAutoRefreshTimer);
}catch(...)
{
}
}
BOOL CMyIEView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
//cs.style |= WS_CLIPCHILDREN;
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);
}
/////////////////////////////////////////////////////////////////////////////
// CMyIEView drawing
void CMyIEView::OnInitialUpdate(int nOpenType, LPCSTR strUrl)
{
try{
m_bFirst = TRUE;
CFixedHtmlView::OnInitialUpdate();
if (nOpenType == 0)
{
m_lpszUrl = "about:blank";
Navigate2(m_lpszUrl, 0, NULL);
}
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
GoHome();
//nOpenType = 1;
m_strWebProxy = ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_strDefaultWebProxy;
}/*catch(CMemoryException * e)
{
// AfxMessageBox("initial error");
if(e!=NULL)e->Delete();
}*/
catch(...)
{
}
// TODO: This code navigates to a popular spot on the web.
// change the code to go where you'd like.
//Navigate2(_T("http://www.microsoft.com/visualc/"),NULL,NULL);
}
/////////////////////////////////////////////////////////////////////////////
// CMyIEView printing
/////////////////////////////////////////////////////////////////////////////
// CMyIEView diagnostics
#ifdef _DEBUG
void CMyIEView::AssertValid() const
{
CFixedHtmlView::AssertValid();
}
void CMyIEView::Dump(CDumpContext& dc) const
{
CFixedHtmlView::Dump(dc);
}
/*CMyIEDoc* CMyIEView::GetDocument() // non-debug version is inline
{
// ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyIEDoc)));
// return (CMyIEDoc*)m_pDocument;
return NULL;
}*/
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyIEView message handlers
void CMyIEView::OnTitleChange(LPCTSTR lpszText)
{
// this will change the main frame's title bar
// if (m_pDocument != NULL )
// m_pDocument->SetTitle(lpszText);
try{
CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
if(tcf!=NULL)
{
if(tcf->m_strStickName != "")
{
tcf->SetWindowText(tcf->m_strStickName);
}
else
{
tcf->SetWindowText(lpszText);
}
tcf->m_Title = lpszText;
}
CString url("");
//need pay attention!
try{
GetLocationURL(url);
}catch(...)
{
}
/*2.3
if(!IsPopUp && m_IsNewPopup && EnablePopupFilter && m_IsNewPopup && !url.IsEmpty())
{
if(((CMainFrame*)pMainFrame)->m_astrPopup.Find(url)!=NULL || PopFilterStar(url))
{
IsPopUp = TRUE;
m_strPossibleURL = url;
}
}
if(IsPopUp && m_IsNewPopup)
{
//is the popup is in a frame or top window
url2 = url.Right(m_strPossibleURL.GetLength()+13);
if(url2 == "navcancl.htm#" + m_strPossibleURL /*for IE 5* /|| url == "about:NavigationCanceled" /*for IE4* / || url==m_strPossibleURL)
{
// CChildFrame* tcf = (CChildFrame*)GetParentFrame();
// tcf->m_pView->IsActive = FALSE;
if(tcf!=NULL)
tcf->PostMessage(WM_CLOSE);
return;
}
else
tcf->ShowWindow(SW_SHOW);
// IsPopUp = FALSE;
}
else if(!tcf->IsWindowVisible())
tcf->ShowWindow(SW_SHOW);
*/
BOOL bSetAddress = TRUE;
if(!url.IsEmpty())
{
if(m_lpszUrl == url)
bSetAddress = FALSE;
else
m_lpszUrl = url;
//2.3 IsPopUp=FALSE;
}
if(pMainFrame!=NULL)
{
//set the new title of tab
if(tcf->m_strStickName=="")
{
int nTabID = ((CMainFrame*)pMainFrame)->FindTab((CChildFrame*)GetParentFrame());
((CMainFrame*)pMainFrame)->SetTabTitle( (char*)lpszText, nTabID );
}
if(bSetAddress && IsActive && !url.IsEmpty() && url!="")
{
((CMainFrame*)pMainFrame)->SetAddress(url);
}
//update tab bar
if(!((CMainFrame*)pMainFrame)->m_bAutoTab)
pMainFrame->PostMessage(WM_UPDATE_TAB);
}
//for history
if(!url.IsEmpty())
SetHistory(url);
m_strLastTitle = lpszText;
// m_strLastURL = url;
}/*catch(CMemoryException * e)
{
// AfxMessageBox("title change error");
if(e!=NULL)e->Delete();
}
catch(CException * e)
{
if(e!=NULL)e->Delete();
}*/
catch(...)
{
}
}
void WBShowScrollBar(CMyIEView* 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(bstryes);
//pHTMLBody->Release();
//pHTMLBody = NULL;
}
//pHTMLElem->Release();
//pHTMLElem = NULL;
}
//pHTMLDoc->Release();
//pHTMLDoc = NULL;
}
//pDisp->Release();
//pDisp = NULL;
}
}
catch(...)
{//?
// AfxMessageBox("Show scrollbar error");
}
try{
if(pHTMLBody!=NULL)
pHTMLBody->Release();
if(pHTMLElem!=NULL)
pHTMLElem->Release();
if(pHTMLDoc!=NULL)
pHTMLDoc->Release();
if(pDisp!=NULL)
pDisp->Release();
}catch(...)
{
}
}catch(...)
{
}
}
void CMyIEView::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 == "" || strUrl.IsEmpty()) && lpszUrl!=NULL)
strUrl = lpszUrl;
m_lpszUrl = strUrl;
//filter popup
if(!m_bToClose && !IsPopUp && pMainFrame!=NULL && EnablePopupFilter && !strUrl.IsEmpty())
{
//2.2 m_IsNewPopup &&
if((((CMainFrame*)pMainFrame)->m_astrPopup.Find(strUrl)!=NULL || PopFilterStar(strUrl)))
{
IsPopUp = TRUE;
m_strPossibleURL = strUrl;
m_nProgress = -1;
CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
if(tcf!=NULL)
{
tcf->PostMessage(WM_CLOSE);
m_bToClose = TRUE;
return;
}
}
}
if(glpDisp == NULL) //complete
{
m_nProgress = -1;
if(IsActive && pMainFrame!=NULL && !strUrl.IsEmpty())
{
//((CMainFrame*)((CChildFrame*)GetParentFrame()->GetParentFrame()))->SetAddress(strUrl);
((CMainFrame*)pMainFrame)->SetAddress(strUrl);
percent= -1;
}
//set icon
if(pMainFrame!=NULL)
{
if((m_nProgress>95 || m_nProgress<0) && !strUrl.IsEmpty())
{
int nTabID = ((CMainFrame*)pMainFrame)->FindTab((CChildFrame*)GetParentFrame());
int oi = oldIcon;
if(IsActive)
{
if(((CChildFrame*)GetParentFrame())->bLock)
oldIcon = ((CMainFrame*)pMainFrame)->SetTabIcon( 4, nTabID );
else if(((CChildFrame*)GetParentFrame())->bProtect)
oldIcon = ((CMainFrame*)pMainFrame)->SetTabIcon( 6, nTabID );
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);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -