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

📄 myieview.cpp

📁 1.MyIE开源工程协议 MyIE开源工程遵循GNU通用公共许可证GPL(GNU General Public License)开发,任何人都可以永久免费安装使用,在你下载和使用MyIE源代码前,请
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		if(i==0 && pmf->m_bPopRightMenu)
		{
			//popup right menu;
			POINT p2 = point;
			ClientToScreen(&p2);
			CWnd *pWnd = WindowFromPoint(p2);
			if(pWnd)
			{
				pWnd->ScreenToClient(&p2);
				pWnd->PostMessage(WM_RBUTTONUP, nFlags, MAKELONG(p2.x, p2.y));
			}
		}
	}	
	}catch(...){}

	CFixedHtmlView::OnRButtonUp(nFlags, point);
}

void CMyIEView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	try{
	//if right button down, then do nothing
	if(m_bIsCapture && pmf->m_nRButtonDown==0)
	{
		//if drag page then not mouse action
		if (pmf->m_bRMouseDrag)//drag page
		{
			if (m_ptPrev.x != point.x || m_ptPrev.y != point.y)
			{
				WBScrollBy(m_ptPrev.x - point.x, m_ptPrev.y - point.y);
				m_ptPrev = point;
				pmf->m_bPopRightMenu = FALSE;
				return;
			}
		}
		if (pmf->m_bRMouseGesture && nFlags == MK_RBUTTON )
		{
			char cDirection;
			if(MoveDirection(point, &cDirection))
			{
				PushMouseGesture(cDirection);
				m_ptRClick = point;
			}
		}
	}
	}catch(...){}

	CFixedHtmlView::OnMouseMove(nFlags, point);
}

void CMyIEView::PushMouseGesture(char cDirection)
{
	if(g_nGestureTail!=0 || g_nGestureHead !=0)
	{
		int pre = (g_nGestureTail -1 + MG_LEN)%MG_LEN;		
		if(g_cGestureStack[pre] == cDirection)
			return;
	}

	g_cGestureStack[g_nGestureTail] = cDirection;
	g_nGestureTail = (g_nGestureTail+1)%MG_LEN;
	if(g_nGestureHead == g_nGestureTail)
		g_nGestureHead = (g_nGestureHead + 1)%MG_LEN;

	//show gesture 
	if (pmf->m_bShowGesture)
	{
		int i=0;
		g_cGestureString[0]= '\0';
		int iMouseGS = g_nGestureHead;//not change g_nGestureHead
		while(g_nGestureTail != iMouseGS)
		{
			g_cGestureString[i] = g_cGestureStack[iMouseGS];
			i++;
			g_cGestureString[i] = '\0';
			iMouseGS = (iMouseGS +1)%MG_LEN;		
		}
		if(i>0)
		{
			CString strName;
			CString strMsg;
			LOADSTR(strMsg,IDS_GESTURE);
			strMsg += ": ";
			strMsg += g_cGestureString;
			if (theApp.m_bUseLngFile)
			{
				CString strUp,strDown,strLeft,strRight;
				//
				LOADSTR(strUp,IDS_UP);
				LOADSTR(strDown,IDS_DOWN);
				LOADSTR(strLeft,IDS_LEFT);
				LOADSTR(strRight,IDS_RIGHT);
				//
				strMsg.Replace("U",strUp);
				strMsg.Replace("D",strDown);
				strMsg.Replace("L",strLeft);
				strMsg.Replace("R",strRight);
			}
			strMsg += " => ";
			int command = pmf->m_GestureList.GetCmdFromName(g_cGestureString);
			_GetMenuItemString(strName,command);
			strMsg += strName;
			pmf->SetMessageText(strMsg);
		}
	}
}

BOOL CMyIEView::MoveDirection(CPoint &point, char *Direction)
{
	int x = point.x - m_ptRClick.x;
	int y = point.y - m_ptRClick.y;
	int dist = x*x+y*y;
	if(dist>64)
	{
		if(x>abs(y) && x>0)
			*Direction = 'R';//right
		else if(abs(x)>abs(y) && x<0)
			*Direction = 'L';//left
		else if(y>abs(x) && y>0)
			*Direction = 'D';//down
		else if(abs(y)>abs(x) && y<0)
			*Direction = 'U';//up
		else
			return FALSE;
		return TRUE;
	}
	else
		return FALSE;
}

CString CMyIEView::GetSortSaveFileName(CString &ext)
{
	CString filename;
	int l;

	GetLocationURL(filename);
	//
	filename.Replace('/', '\\');
	if(filename.Right(1) == "\\")
		filename = filename.Left(filename.GetLength()-1);

	l = filename.ReverseFind('\\');
	filename = filename.Mid(l+1);
	filename.Replace(':', '_');
	l = filename.Find('?');
	if(l>0)
		filename = filename.Left(l);
	l = filename.ReverseFind('.');
	if(l>0)
	{
		ext = filename.Right(filename.GetLength()-l);
		ext.MakeLower();
		filename = filename.Left(l);
	}
	if(ext != ".htm" && ext != ".html" && ext !=".shtml" && !pmf->IsImageType(ext))
	{
		ext = ".htm";
	}
	if (pmf->m_bNameByTitle)
	{
		CString strName;
		CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
		GET_TAB_TITLE(tcf,strName);
		GET_URL_NAME(strName)
		REPLACE_ERR_PATH_CHAR(strName)
		int len = strName.GetLength();
		if (len)
		{
			if (len>FN_LEN)//cut to <len
			{
				strName = strName.Left(FN_LEN);
				if (strName.GetAt(FN_LEN-1) & 0x80)
				{
					int count=0;
					for (int i=0;i<FN_LEN;i++)
					{
						if (strName.GetAt(i) & 0x80)
							count++;
						else
							count = 0;
					}
					if (count%2)
						strName = strName.Left(FN_LEN-1);
				}
				strName += "_";
			}
			filename = strName;
		}
		// bag.jpg => bag
		if (filename.Right(ext.GetLength()) == ext)
		{
			filename = filename.Left(filename.GetLength()-ext.GetLength());
		}
	}

	return filename + ext;
}

void CMyIEView::OnFileAutoSave() 
{
	// TODO: Add your command handler code here
	try{		
	IHTMLDocument2 * pDoc = NULL;
	IPersistFile *pPersistFile = NULL;
	CString filename, ext, htmlname,strNewFileName;
	int l;
	BSTR bfilename;
	char tmp[4]; 
	GetLocationURL(filename);
	htmlname.Empty();
	//
	strNewFileName = GetSortSaveFileName(ext);
	CString strSortSaveFolder;
	strSortSaveFolder.Empty();
	if (pmf->m_bSavePageByDate)
	{
		CString strTime;
		SYSTEMTIME time;
		::GetLocalTime(&time);
		strTime.Format("%04d_%02d_%02d",time.wYear,time.wMonth,time.wDay);
		strSortSaveFolder = strTime;
	}
	//############################################################
	//select save path
	if (strSortSaveFolder.GetLength())
	{
		pmf->m_strAutoSavePath = theApp.m_strDefaultDir;
		pmf->m_strAutoSavePath += strSortSaveFolder;
		pmf->m_strAutoSavePath += "\\";
	}
	else
		pmf->m_strAutoSavePath = theApp.m_strDefaultDir;
	//
	if(pmf->m_bCateWithSite)
	{
		CString site;
		GetLocationURL(site);
		pmf->GetSiteName(site);
		//
		pmf->m_strAutoSavePath += site;
		pmf->m_strAutoSavePath += "\\";
	}
	//#############################################################
	//make sure the dir exist
	_CreateFullDir(pmf->m_strAutoSavePath);
	
	//#############################################################
	//before save
	if(	pmf->m_nAutoSave == 0 || 
		pmf->m_nAutoSave == 1 || 
		pmf->m_nAutoSave == 4 || 
		pmf->m_nAutoSave == 5 || 
		(pmf->m_nAutoSave == 3 && filename.Left(5)=="file:")
		)
	{
		keybd_event(VK_TAB, MapVirtualKey(VK_TAB, 0), 0, 0);
		if(pmf->m_nAutoSave==1)
		{
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
		}
		else if(pmf->m_nAutoSave==4)
		{
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
		}
		else if(pmf->m_nAutoSave==5)
		{
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
			keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
			keybd_event('A', MapVirtualKey('A', 0), 0, 0);
		}
		keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
		//set save directory
		HKEY hKey;
		if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Main"), &hKey) == ERROR_SUCCESS)
		{
			RegSetValueEx(hKey, _T("Save Directory"), 0, REG_SZ, 
				(LPBYTE)(LPCTSTR)pmf->m_strAutoSavePath,
				pmf->m_strAutoSavePath.GetLength()
				);
		}
		SendMessage(WM_COMMAND, ID_FILE_SAVEAS, 0);
	}
	else if(pmf->m_nAutoSave == 2)
	{
		filename = strNewFileName;
		l = filename.ReverseFind('.');
		if(l>0)
		{
			ext = filename.Right(filename.GetLength()-l);
			ext.MakeLower();
			filename = filename.Left(l);
		}
		filename = pmf->m_strAutoSavePath + filename;
		//
		l = 0;
		HFILE hf; OFSTRUCT of;
		htmlname = filename + ext;
		hf = OpenFile(htmlname, &of, OF_EXIST);
		while(hf!=HFILE_ERROR)
		{
			l++;
			htmlname = filename;
			htmlname += '[';
			itoa(l, tmp, 10);
			htmlname += tmp;
			htmlname += ']';
			htmlname += ext;
			hf = OpenFile(htmlname, &of, OF_EXIST);
		}
		if(!pmf->IsImageType(ext))
		{
			pDoc = (IHTMLDocument2*)GetHtmlDocument();
			bfilename = htmlname.AllocSysString();
			if (SUCCEEDED(pDoc->QueryInterface(IID_IPersistFile, (void**)&pPersistFile)))
				pPersistFile->Save(bfilename, FALSE);
			
			try{
				SysFreeString(bfilename);
				if(pPersistFile!=NULL)
					pPersistFile->Release();
				if(pDoc != NULL)
					pDoc->Release();
			}catch(...){}
		}
		else
		{
			//save image
			GetLocationURL(filename);
			DWORD dwEntrySize=0;
			LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry;
			if (!GetUrlCacheEntryInfo(filename,NULL,&dwEntrySize))
			{
				
				if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
				{
                    
					lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) 
						new char[dwEntrySize];
					
					if (GetUrlCacheEntryInfo(filename,lpCacheEntry,&dwEntrySize))
					{
						CopyFile(lpCacheEntry->lpszLocalFileName, htmlname, FALSE);
					}
					delete lpCacheEntry;
					lpCacheEntry = NULL;
					dwEntrySize = 0;
				}
				else
				{
					//local image files
					pmf->DecodeEscap(filename);
					pmf->DecodeEscap(htmlname);
					if(filename.Left(8)=="file:///")
						filename = filename.Mid(8);
					CopyFile(filename, htmlname, FALSE);
				}
			}
		}
	}
	else if(pmf->m_nAutoSave == 3)
	{
		pmf->m_bIsAutoSave = TRUE;
		pmf->m_pCurView = this;
		pmf->SendMessage(WM_COMMAND, ID_FILE_QUICKSAVE,0);
		pmf->m_bIsAutoSave = FALSE;
	}
	
	l = pmf->FindTab((CChildFrame*)GetParentFrame());
	pmf->SetTabIcon(TI_SAVE, l, this);
	if(pmf->m_nTabStyle==2)
		pmf->PostMessage(WM_UPDATE_TAB);
	
	CString strMsg;
	LOADSTR(strMsg ,IDS_PAGE_SAVED);
	if (htmlname.GetLength()>0)
		strMsg+= htmlname;
	else
		strMsg+= pmf->m_strAutoSavePath;
	//add local url
	strMsg += " <= ";
	strMsg += m_lpszUrl;
	pmf->AddToCollector(strMsg,12);
	}catch(...){}	
}

void CMyIEView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bIsCapture)
	{
		m_bIsCapture = FALSE;
		ReleaseCapture();
	}
	CFixedHtmlView::OnLButtonUp(nFlags, point);
}

int CMyIEView::MouseAction(int kind) 
{
	if (kind)
	{
		g_bRTab = FALSE;
		//special
		if (kind==ID_OPEN_LINK)
			return OpenLinkUnderMouse(INW_NORMAL);
		else if (kind==ID_OPEN_LINK_ACTIVE)
			return OpenLinkUnderMouse(INW_ACTIVE);
		else if (kind==ID_OPEN_LINK_DEACTIVE)
			return OpenLinkUnderMouse(INW_INACTIVE);
		else
			pmf->PostMessage(WM_COMMAND, kind, 0);
	}
	return TRUE;
}

CString CMyIEView::GetPointUrl(POINT pt)
{
	CString strUrl;
	strUrl.Empty();

	LPDISPATCH pDisp; 
	IHTMLDocument2* pHTMLDoc=NULL;
	IHTMLElement* pElem = NULL;
	IHTMLElement* pElemParent = NULL;

	try{
	pDisp = GetHtmlDocument();
	if(pDisp!=NULL)
	{
		if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc)))
		{
			if(pHTMLDoc!=NULL)
			{
				if(SUCCEEDED(pHTMLDoc->elementFromPoint(pt.x, pt.y, &pElem)))
				{
					BSTR bstrSrc;
					while(pElem)
					{
						pElem->get_tagName(&bstrSrc);
							strUrl = bstrSrc;
						SysFreeString(bstrSrc);
						if (strUrl!="A")
						{
							pElem->get_parentElement(&pElemParent);
							pElem->Release();
							pElem = pElemParent;
						}
						else
						{
							pElem->toString(&bstrSrc);
							strUrl=bstrSrc;
							SysFreeString(bstrSrc);
							break;
						}
					}
				}
			}
		}
	}
	}catch(...){}

	try{
	RELEASE(pElem)
	RELEASE(pHTMLDoc)
	RELEASE(pDisp)
	}catch(...){}

	return strUrl;
}

int CMyIEView::OpenLinkUnderMouse(int nActive)
{
	POINT pt;
	GetCursorPos(&pt);
	ScreenToClient(&pt);
	CString strUrl = GetPointUrl(pt);
	//
	if (IS_URL(strUrl) || IS_SCRIPT_MAILTO(strUrl))
	{
		pmf->m_ptMouseDown = pt;
		pmf->ClickPoint(nActive);
		return TRUE;
	}
	return FALSE;
}

void CMyIEView::VScrollPageUp()
{
	this->PostMessage(WM_KEYDOWN,VK_PRIOR,1);
}

void CMyIEView::VScrollPageDown()
{
	this->PostMessage(WM_KEYDOWN,VK_NEXT,1);
}

void CMyIEView::PowerRefresh()
{
	CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
	if (m_lpszUrl == "about:blank")
		return;
	int nTabID = pmf->FindTab(tcf);
	if (m_nOldIcon==-1 && pmf->m_nTabStyle==2)
		pmf->PostMessage(WM_UPDATE_TAB);
	pmf->SetTabIcon( TI_1, nTabID, this );
	if (IS_RES_URL(m_lpszUrl))
	{
		CString strNewUrl;// not use m_lpszUrl; user may modified the url
		pmf->m_wndAddress->GetEditCtrl()->GetWindowText(strNewUrl);
		DO_RES_URL(strNewUrl);
		CChildFrame* tcf = (CChildFrame*)pmf->MDIGetActive();
		if (tcf && tcf->m_pView == this)
			pmf->m_wndAddress->GetEditCtrl()->SetWindowText(strNewUrl);
		Navigate2(strNewUrl, 0, NULL);
		return;
	}
	//for http://www.ror.cn refresh
	Refresh2(REFRESH_NORMAL);//Refresh2(REFRESH_COMPLETELY);
}

void CMyIEView::OnViewPagesize50() 
{
	// TODO: Add your command handler code here
	pmf->m_bShowScriptResult = false;
	pmf->RunScript("<script language=\"JavaScript\"> document.body.style.zoom=\"50%\"; </script>");
	pmf->m_bShowScriptResult = true;
}

void CMyIEView::OnViewPagesize100() 
{
	// TODO: Add your command handler code here
	pmf->m_bShowScriptResult = false;
	pmf->RunScript("<script language=\"JavaScript\"> document.body.style.zoom=\"100%\"; </script>");
	pmf->m_bShowScriptResult = true;
}

void CMyIEView::OnViewPagesize200() 
{
	// TODO: Add your command handler code here
	pmf->m_bShowScriptResult = false;
	pmf->RunScript("<script language=\"JavaScript\"> document.body.style.zoom=\"150%\"; </script>");
	pmf->m_bShowScriptResult = true;
}

void CMyIEView::OnViewPagesizeAdd10() 
{
	// TODO: Add your command handler code here
	pmf->m_bShowScriptResult = false;
	pmf->RunScript("<script language=\"JavaScript\">	var i = parseInt(document.body.style.zoom);	if(isNaN(i))i=100; if(i<0)i=0; if(i==19)i=18; newZoom=i+10+'%'; document.body.style.zoom=newZoom; </script>");
	pmf->m_bShowScriptResult = true;
}

void CMyIEView::OnViewPagesizeDec10() 
{
	// TODO: Add your command handler code here
	pmf->m_bShowScriptResult = false;
	pmf->RunScript("<script language=\"JavaScript\">	var i = parseInt(document.body.style.zoom);	if(isNaN(i))i=100; if(i<18)i=18; newZoom=i-10+'%'; document.body.style.zoom=newZoom; </script>");
	pmf->m_bShowScriptResult = true;
}

void CMyIEView::OnFileImportExport() 
{
	// TODO: Add your command handler code here
	try{
	CFindWnd FindIEWnd( m_wndBrowser.m_hWnd, "Shell DocObject View");
	::SendMessage( FindIEWnd.m_hWnd, WM_COMMAND, MAKEWPARAM(LOWORD(374), 0x0), 0 );
	}catch(...){}
}

⌨️ 快捷键说明

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