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

📄 greenbrowserview.cpp

📁 用VC写的浏览器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						if(m_bIsActive && pmf!=NULL)
							pmf->m_bIsSecure = m_bIsSecure;
					}catch(...){}
					
					try
					{
						if(pHTMLDoc!=NULL)
							pHTMLDoc->Release();
						if(pDisp!=NULL)
							pDisp->Release();
					}catch(...){}
				}
			}
		}catch(...){}
	}catch(...){}
}

void CGreenBrowserView::OnFileSaveAs()
{
	// TODO: Add your command handler code here
	ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT,
		   NULL, NULL);
}

void CGreenBrowserView::OnFileSavehtml() 
{
	// TODO: Add your command handler code here
	ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER,
		   NULL, NULL);
}

void CGreenBrowserView::OnFilePrintSetup() 
{
	// TODO: Add your command handler code here
	ExecCommand(OLECMDID_PAGESETUP);
}

void CGreenBrowserView::OnFileProperty() 
{
	// TODO: Add your command handler code here
	ExecCommand(OLECMDID_PROPERTIES);
}

void CGreenBrowserView::ExecCommand(DWORD nCmdID)
{
	LPOLECOMMANDTARGET lpTarget = NULL;
	LPDISPATCH lpDisp = GetHtmlDocument();

	if (lpDisp != NULL)
	{
		// the control will handle all printing UI
		if (SUCCEEDED(lpDisp->QueryInterface(IID_IOleCommandTarget,
				(LPVOID*) &lpTarget)))
		{
			lpTarget->Exec(NULL, nCmdID, 0, NULL, NULL);
			lpTarget->Release();
		}
		lpDisp->Release();
	}	
}

void CGreenBrowserView::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	try{

	if(m_bIsCapture)
	{
		int i =0;
		m_bIsCapture = FALSE;
		ReleaseCapture();
		//if have right button down action, then not pop menu
		if (pmf->m_nRButtonDown!=0)
			goto _PopRightMenu;
		//if mouse drag and not move then need pop menu
		if (pmf->m_bRMouseDrag)
			goto _PopRightMenu;

		g_cGestureString[0]= '\0';
		while(g_nGestureTail != g_nGestureHead)
		{
			g_cGestureString[i] = g_cGestureStack[g_nGestureHead];
			i++;
			g_cGestureString[i] = '\0';
			g_nGestureHead = (g_nGestureHead +1)%MG_LEN;		
		}

		if(i>0)
		{
			int command = pmf->m_GestureList.GetCmdFromName(g_cGestureString);
			if (command)
				MouseAction(command);
		}

_PopRightMenu:		
		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 CGreenBrowserView::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 CGreenBrowserView::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 CGreenBrowserView::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 CGreenBrowserView::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 CGreenBrowserView::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 (m_bSortSave)
	{
		m_bSortSave = FALSE;
		//not show the dlg
		if ( pmf->m_bShowSortSaveDlg && PRESS(VK_MENU) ||
			!pmf->m_bShowSortSaveDlg && !PRESS(VK_MENU))
		{
			if (pmf->m_strSortSaveFolder.GetLength())
			{
				strSortSaveFolder = pmf->m_strSortSaveFolder;
				goto _BeforeSave;
			}
		}
		//
		CSortSaveDlg dlg;
		CChildFrame* tcf = ((CChildFrame*)GetParentFrame());
		GET_TAB_TITLE(tcf,dlg.m_strTitle);
		//
		dlg.m_bType = pmf->m_bNameByTitle;
		dlg.m_strUrl = filename;
		dlg.m_strFileName = strNewFileName;
		dlg.m_strSortSaveFolder = pmf->m_strSortSaveFolder;
		if(dlg.DoModal()==IDOK)
		{
			strNewFileName = dlg.m_strFileName;
			REPLACE_ERR_PATH_CHAR(strNewFileName)
				pmf->m_strSortSaveFolder = strSortSaveFolder = dlg.m_strSortSaveFolder;
		}
		else
			return ;
	}
	else if (pmf->m_bSavePageByDate)
	{
		CString strTime;
		SYSTEMTIME time;
		::GetLocalTime(&time);
		strTime.Format("%04d_%02d_%02d",time.wYear,time.wMonth,time.wDay);
		strSortSaveFolder = strTime;
	}
_BeforeSave:
	//############################################################
	//select save path
	if (strSortSaveFolder.GetLength())
	{
		pmf->m_strAutoSavePath = theApp.m_strDefaultDirSort;
		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
				{
					//loc

⌨️ 快捷键说明

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