📄 mainfrm.cpp
字号:
typedef HRESULT (CALLBACK* LPFNDLLFUNC1)(HWND ,DWORD);
HINSTANCE hIns = LoadLibrary("shlwapi.dll");
if(hIns != NULL)
{
LPFNDLLFUNC1 lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hIns, "SHAutoComplete");
if(lpfnDllFunc1!=NULL)
lpfnDllFunc1(m_wndAddress.GetEditCtrl()->m_hWnd, 0xe);
FreeLibrary(hIns);
}
/*
HRESULT hr;
IUrlHistoryStg2 *puhs;
IEnumSTATURL *pesu;
STATURL su;
ULONG celt;
_bstr_t bstr;
hr = ::CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg, (LPVOID *)&puhs);
m_pAutoEnumString=new CAutoEnumString;
m_pAutoEnumString->AddRef();
if(SUCCEEDED(hr))
{
hr = puhs->EnumUrls(&pesu);
if(SUCCEEDED(hr))
{
while(SUCCEEDED(pesu->Next(1, &su, &celt)) && celt > 0)
{
bstr = su.pwcsUrl;
CString strAddress;
strAddress=(LPCTSTR)(bstr);
if(strAddress.Find("http://",0)==0)//有选择的添加
{
// m_wndAddress.AddString(bstr);
if(strAddress.GetLength()<30)
{
COMBOBOXEXITEM item;
item.mask = CBEIF_TEXT;
item.iItem = -1; // insert at the end. So the order is keeped
item.pszText = (LPTSTR)(LPCTSTR)bstr;
m_wndAddress.InsertItem(&item);
}
}
m_pAutoEnumString->AddString(bstr);
}
puhs->Release();
}
}
//自动完成功能的添加
m_pAutoEnumString->QueryInterface(IID_IEnumString,(LPVOID*)&m_pEnumSting);
m_pAutoEnumString->Release();
::CoCreateInstance( CLSID_AutoComplete, NULL,
CLSCTX_INPROC_SERVER, IID_IAutoComplete,
(LPVOID *) &m_pAutoCmpAddress );
HWND hwnd= (HWND)m_wndAddress.SendMessage(CBEM_GETEDITCONTROL);
if(hwnd)
{
m_pAutoCmpAddress->Init(hwnd,m_pEnumSting,NULL,NULL);
}
IAutoComplete2 *pac2;
if (SUCCEEDED(m_pAutoCmpAddress->QueryInterface(IID_IAutoComplete2, (LPVOID*)&pac2)))
{
pac2->SetOptions(ACO_AUTOSUGGEST|ACO_AUTOAPPEND);
pac2->Release();
}
*/
return TRUE;
}
CIEView* CMainFrame::GetActiveIEView()
{
CWnd* pWnd=GetWindow(GW_CHILD);
ASSERT(pWnd->IsKindOf(RUNTIME_CLASS(CContainerView)));
return ((CContainerView*)pWnd)->GetAciveView();
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (m_wndStatusBar.GetSafeHwnd() && m_wndTabCtrl.GetSafeHwnd())
{
m_wndStatusBar.SetPaneInfo(1,m_wndStatusBar.GetItemID(1),SBPS_STRETCH,cx*3/5);
CRect rc;
m_wndStatusBar.GetItemRect(1, rc); //0
m_wndTabCtrl.SetWindowPos(NULL,rc.left,rc.top,rc.Width(),
rc.Height()+1, SWP_NOZORDER);
}
if(IsIconic())
{
ShowWindow(SW_HIDE);
}
}
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_LBUTTONUP)
{
//处理单击动画关闭窗口
CPoint pt;
::GetCursorPos(&pt);
CRect rc;
m_wndAnimate.GetWindowRect(&rc);
if(rc.PtInRect(pt))
{
DeleteCurIEView();
}
}
return CFrameWnd::PreTranslateMessage(pMsg);
}
BOOL CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
if(ID_TABBAR == (UINT)wParam)
{
NMHDR* pNMHDR = (NMHDR*)lParam;
switch(pNMHDR->code)
{
case TCN_SELCHANGING:
break;
case TCN_SELCHANGE:
{
int nIndex=m_wndTabCtrl.GetCurSel();
CWnd* pWnd=GetWindow(GW_CHILD);
ASSERT(pWnd->IsKindOf(RUNTIME_CLASS(CContainerView)));
((CContainerView*)pWnd)->SetActiveView(nIndex);
m_wndAddress.SetWindowText(GetActiveIEView()->GetLocationURL());
SetWindowTextX(GetActiveIEView()->m_strTitle);
COleVariant vaZoomFactor;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM,OLECMDEXECOPT_DONTPROMPTUSER,NULL,&vaZoomFactor);
SetFontSizeVal(vaZoomFactor.intVal*10+1);
}
break;
}
}
/*
if(AFX_IDW_TOOLBAR==(UINT)wParam)
{
//AfxMessageBox("aa");
NMHDR* pNMHDR = (NMHDR*)lParam;
if(pNMHDR->code==TBN_DROPDOWN)
{
ButtonDropDown(pNMHDR,pResult);
}
}
*/
return CFrameWnd::OnNotify(wParam, lParam, pResult);
}
LRESULT CMainFrame::OnCreateNewIEView(WPARAM wParam,LPARAM lParam)
{
int nOldActive=m_wndTabCtrl.GetCurSel();
CWnd* pWnd=GetWindow(GW_CHILD);
ASSERT(pWnd->IsKindOf(RUNTIME_CLASS(CContainerView)));
CIEView* pView=((CContainerView*)pWnd)->CreateIEView();
if(pView)
{
((CContainerView*)pWnd)->AddTabItem("请稍候……",(CWnd*)pView);
if(m_bActvieNew)
{
((CContainerView*)pWnd)->SetActiveView(m_wndTabCtrl.GetItemCount()-1);
m_wndTabCtrl.SetCurSel(m_wndTabCtrl.GetItemCount()-1);
}
else
{
//((CContainerView*)pWnd)->SetActiveView(nOldActive);
//m_wndTabCtrl.SetCurSel(nOldActive);
}
return (LRESULT)pView;
}
else
{
return NULL;
}
}
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
SaveWindowPlace();
//保存是否显示标题
AfxGetApp()->WriteProfileInt("","ShowTitle",m_bShowTitle);
AfxGetApp()->WriteProfileInt("","ActiveNewWnd",m_bActvieNew);
CFrameWnd::OnClose();
}
void CMainFrame::OnBack()
{
// TODO: Add your command handler code here
GetActiveIEView()->GoBack();
}
void CMainFrame::OnForward()
{
// TODO: Add your command handler code here
GetActiveIEView()->GoForward();
}
void CMainFrame::OnCut()
{
// TODO: Add your command handler code here
if(GetFocus()==m_wndAddress.GetEditCtrl())
{
CBBClipboard clipb;
CString strText;
int nStart,nEnd;
m_wndAddress.GetEditCtrl()->GetSel(nStart,nEnd);
m_wndAddress.GetEditCtrl()->GetWindowText(strText);
strText=strText.Mid(nStart,nEnd);
clipb.SetText((LPSTR)(LPCTSTR)strText);
m_wndAddress.GetEditCtrl()->ReplaceSel("",TRUE);
}
else
{
GetActiveIEView()->ExecWB(OLECMDID_CUT, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
}
}
void CMainFrame::OnCopy()
{
// TODO: Add your command handler code here
if(m_wndAddress.GetFocus()==m_wndAddress.GetEditCtrl())
{
CBBClipboard clipb;
CString strText;
int nStart,nEnd;
m_wndAddress.GetEditCtrl()->GetSel(nStart,nEnd);
m_wndAddress.GetEditCtrl()->GetWindowText(strText);
strText=strText.Mid(nStart,nEnd);
clipb.SetText((LPSTR)(LPCTSTR)strText);
}
else
{
GetActiveIEView()->ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
}
}
void CMainFrame::OnPaste()
{
// TODO: Add your command handler code here
if(m_wndAddress.GetFocus()==m_wndAddress.GetEditCtrl())
{
CBBClipboard clipb;
char szText[1024];
clipb.GetText(szText,1023);
m_wndAddress.GetEditCtrl()->ReplaceSel(szText,TRUE);
}
else
{
GetActiveIEView()->ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
}
}
void CMainFrame::OnStop()
{
// TODO: Add your command handler code here
GetActiveIEView()->Stop();
}
void CMainFrame::OnRefresh()
{
// TODO: Add your command handler code here
GetActiveIEView()->Refresh();
}
void CMainFrame::OnHome()
{
// TODO: Add your command handler code here
GetActiveIEView()->GoHome();
}
void CMainFrame::OnSearch()
{
// TODO: Add your command handler code here
GetActiveIEView()->GoSearch();
}
void CMainFrame::OnPrintdoc()
{
// TODO: Add your command handler code here
LPOLECOMMANDTARGET pCmdTarg = NULL;
LPDISPATCH m_pDisp = GetActiveIEView()->GetHtmlDocument(); //get the IDispatch interface pointer
if(m_pDisp==NULL)
return;
m_pDisp->QueryInterface(IID_IOleCommandTarget, (LPVOID*)&pCmdTarg); //query for olecommandtarget interface
ASSERT(pCmdTarg);
pCmdTarg->Exec(NULL, //call the olecommandtarget's Exec method
OLECMDID_PRINT,
0,
NULL,
NULL );
if (pCmdTarg)
pCmdTarg->Release(); // release document's command target
if (m_pDisp)
m_pDisp->Release(); // release document's dispatch interfac
}
void CMainFrame::OnViewsource()
{
// TODO: Add your command handler code here
MSHTML::IHTMLDocument2Ptr ptrDoc;
CSourceDialog *dlg;
ptrDoc = GetActiveIEView()->GetHtmlDocument();
dlg = new CSourceDialog;
dlg->Create(IDD_SOURCE);
dlg->ShowSource(ptrDoc);
dlg->ShowWindow(SW_SHOW);
}
void CMainFrame::OnViewfont()
{
// TODO: Add your command handler code here
}
void CMainFrame::OnViewFontsLargest()
{
// TODO: Add your command handler code here
COleVariant vaZoomFactor(4l);
m_nFontSize=41;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
&vaZoomFactor, NULL);
}
void CMainFrame::OnUpdateViewFontsLargest(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_nFontSize==41);
}
void CMainFrame::OnViewFontsLarge()
{
// TODO: Add your command handler code here
COleVariant vaZoomFactor(3l);
m_nFontSize=31;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
&vaZoomFactor, NULL);
}
void CMainFrame::OnUpdateViewFontsLarge(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_nFontSize==31);
}
void CMainFrame::OnViewFontsMedium()
{
// TODO: Add your command handler code here
COleVariant vaZoomFactor(2l);
m_nFontSize=21;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
&vaZoomFactor, NULL);
}
void CMainFrame::OnUpdateViewFontsMedium(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_nFontSize==21);
}
void CMainFrame::OnViewFontsSmall()
{
// TODO: Add your command handler code here
COleVariant vaZoomFactor(1l);
m_nFontSize=11;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
&vaZoomFactor, NULL);
}
void CMainFrame::OnUpdateViewFontsSmall(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_nFontSize==11);
}
void CMainFrame::OnViewFontsSmallest()
{
// TODO: Add your command handler code here
COleVariant vaZoomFactor(0l);
m_nFontSize=01;
GetActiveIEView()->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
&vaZoomFactor, NULL);
}
void CMainFrame::OnUpdateViewFontsSmallest(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_nFontSize==01);
}
void CMainFrame::OnNewWindow()
{
// TODO: Add your command handler code here
SendMessage(WM_NEW_IEVIEW);
}
void CMainFrame::OnShowAdrress()
{
// TODO: Add your command handler code here
m_wndAddress.ShowWindow(m_wndAddress.IsWindowVisible()?SW_HIDE:SW_SHOW);
RecalcLayout();
}
void CMainFrame::OnUpdateShowAdrress(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_wndAddress.IsWindowVisible()?1:0);
}
void CMainFrame::OnFavorite(UINT nID)
{
CString strAddress=m_astrFavoriteURLs.ElementAt(nID-0xe00);
GetActiveIEView()->ReadUrlDocument((LPCTSTR)strAddress);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -