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