www.pudn.com > mu_explorer.rar > MainFrm.cpp


// MainFrm.cpp : implementation of the CMainFrame class 
// 
 
#include "stdafx.h" 
#include "SExplore.h" 
#include "MainFrm.h" 
#include "ContainerView.h" 
#include "SourceDialog.h" 
#include "ViewManView.h" 
#include "IEView.h" 
#include "DialogFav.h" 
 
 
typedef UINT (CALLBACK* LPFNORGFAV)(HWND, LPTSTR); 
typedef BOOL (CALLBACK* LPFNADDFAV)(HWND, TCHAR*, UINT, TCHAR*, UINT, LPITEMIDLIST); 
 
#include  
#include  
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_SIZE() 
	ON_WM_CLOSE() 
	ON_COMMAND(ID_BACK, OnBack) 
	ON_COMMAND(ID_FORWARD, OnForward) 
	ON_COMMAND(ID_CUT, OnCut) 
	ON_COMMAND(ID_COPY, OnCopy) 
	ON_COMMAND(ID_PASTE, OnPaste) 
	ON_COMMAND(ID_STOP, OnStop) 
	ON_COMMAND(ID_REFRESH, OnRefresh) 
	ON_COMMAND(ID_HOME, OnHome) 
	ON_COMMAND(ID_SEARCH, OnSearch) 
	ON_COMMAND(ID_PRINTDOC, OnPrintdoc) 
	ON_COMMAND(ID_VIEWSOURCE, OnViewsource) 
	ON_COMMAND(ID_VIEWFONT, OnViewfont) 
	ON_COMMAND(ID_VIEW_FONTS_LARGEST, OnViewFontsLargest) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_LARGEST, OnUpdateViewFontsLargest) 
	ON_COMMAND(ID_VIEW_FONTS_LARGE, OnViewFontsLarge) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_LARGE, OnUpdateViewFontsLarge) 
	ON_COMMAND(ID_VIEW_FONTS_MEDIUM, OnViewFontsMedium) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_MEDIUM, OnUpdateViewFontsMedium) 
	ON_COMMAND(ID_VIEW_FONTS_SMALL, OnViewFontsSmall) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_SMALL, OnUpdateViewFontsSmall) 
	ON_COMMAND(ID_VIEW_FONTS_SMALLEST, OnViewFontsSmallest) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_FONTS_SMALLEST, OnUpdateViewFontsSmallest) 
	ON_COMMAND(ID_NEW_WINDOW, OnNewWindow) 
	ON_COMMAND(ID_SHOW_ADRRESS, OnShowAdrress) 
	ON_UPDATE_COMMAND_UI(ID_SHOW_ADRRESS, OnUpdateShowAdrress) 
	ON_COMMAND(ID_SELECT_ALL, OnSelectAll) 
	ON_COMMAND(ID_VIEW_FAVORITY, OnViewFavority) 
	ON_COMMAND(ID_INET_OPTION, OnInetOption) 
	ON_COMMAND(ID_ADDTO_FAV, OnAddtoFav) 
	ON_COMMAND(ID_SETTING_FAV, OnSettingFav) 
	ON_COMMAND(ID_DOC_SAVE_AS, OnDocSaveAs) 
	ON_COMMAND(ID_EDIT_FIND, OnEditFind) 
	ON_COMMAND(ID_CLOSE_WINDOW, OnCloseWindow) 
	ON_COMMAND(ID_CLOSE_ALL, OnCloseAll) 
	ON_COMMAND(ID_SHOWTITLE, OnShowtitle) 
	ON_UPDATE_COMMAND_UI(ID_SHOWTITLE, OnUpdateShowtitle) 
	ON_COMMAND(ID_SHOW_MAINWND, OnShowMainwnd) 
	ON_COMMAND(ID_SETDEFAULTID, OnSetdefaultid) 
	ON_UPDATE_COMMAND_UI(ID_BACK, OnUpdateBack) 
	ON_UPDATE_COMMAND_UI(ID_FORWARD, OnUpdateForward) 
	ON_COMMAND(ID_SETACTIVENEW, OnSetActiveNewWnd) 
	ON_UPDATE_COMMAND_UI(ID_SETACTIVENEW, OnUpdateSetActiveNewWnd) 
	ON_UPDATE_COMMAND_UI(ID_SETDEFAULTID, OnUpdateSetdefaultid) 
	//}}AFX_MSG_MAP 
	ON_MESSAGE(WM_NEW_IEVIEW,OnCreateNewIEView)	 
	ON_COMMAND(IDOK, OnNewAddressEnter) 
	ON_CBN_SELENDOK(AFX_IDW_TOOLBAR + 1,OnNewAddress) 
	ON_CBN_EDITCHANGE(AFX_IDW_TOOLBAR + 1,OnAddressChange) 
	ON_COMMAND_RANGE(0xe00, 0xfff, OnFavorite) 
	ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown) 
	ON_MESSAGE(WM_COPYDATA,OnCopyDataFromApp) 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_SEPARATOR,           // status line indicator 
	ID_INDICATOR_CAPS	 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	// TODO: add member initialization code here 
	NONCLIENTMETRICS ncm; 
	memset(&ncm, 0, sizeof(NONCLIENTMETRICS)); 
	ncm.cbSize = sizeof(NONCLIENTMETRICS); 
	VERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 
		sizeof(NONCLIENTMETRICS), &ncm, 0)); 
	m_fontAddress.CreateFontIndirect(&ncm.lfMessageFont); 
	m_strMainWndText=AfxGetApp()->GetProfileString("","MainTitle","波子浏览器"); 
	m_bActvieNew=AfxGetApp()->GetProfileInt("","ActiveNewWnd",1); 
 
	m_bShowTitle=AfxGetApp()->GetProfileInt("","ShowTitle",1); 
 
	m_nFontSize=21; 
	m_pAutoCmpAddress=NULL; 
	m_pEnumSting=NULL; 
	m_pAutoEnumString=NULL; 
	CString strBkBmFile=AfxGetApp()->GetProfileString("","BkBitmap",""); 
	strBkBmFile.TrimLeft(); 
	strBkBmFile.TrimRight(); 
	if(!strBkBmFile.IsEmpty()) 
	{ 
		HBITMAP hbm=NULL; 
		hbm=(HBITMAP)::LoadImage(NULL,strBkBmFile, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); 
		m_bmBarBm.Attach(hbm); 
	} 
	else 
	{ 
		m_bmBarBm.LoadBitmap(IDB_BMBAR); 
	} 
} 
 
CMainFrame::~CMainFrame() 
{ 
	if(m_pAutoCmpAddress) 
		m_pAutoCmpAddress->Release(); 
	if(m_pEnumSting) 
		m_pEnumSting->Release(); 
	m_fontAddress.DeleteObject(); 
	if(m_bmBarBm.GetSafeHandle()) 
		m_bmBarBm.DeleteObject(); 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
 
	if (!m_wndMenuBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, 
		CRect(0,0,0,0), 10002) || 
		!m_wndMenuBar.LoadMenu(IDR_MAINFRAME)) 
	{ 
		TRACE0("Failed to create toolbar\n"); 
		return -1;      // fail to create 
	} 
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP, 
		CRect(0,0,0,0), AFX_IDW_TOOLBAR) || 
		!m_wndToolBar.LoadToolBar(IDR_NAVBAR)) 
	{ 
		TRACE0("Failed to create toolbar\n"); 
		return -1;      // fail to create 
	} 
	 
	// set up toolbar properties 
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); 
 
	CString		str; 
	CImageList	imageList; 
	CBitmap		bitmap; 
 
	// Create and set the normal toolbar image list. 
	bitmap.LoadBitmap(IDB_COOLTOOL); 
	imageList.Create(22, 20, ILC_COLORDDB|ILC_MASK, 13, 1); 
	imageList.Add(&bitmap, RGB(255,0,255)); 
	m_wndToolBar.GetToolBarCtrl().SetImageList(&imageList); 
	imageList.Detach(); 
	bitmap.Detach(); 
 
	// Create and set the hot toolbar image list. 
	bitmap.LoadBitmap(IDB_HOTTOOL); 
	imageList.Create(22, 20, ILC_COLORDDB|ILC_MASK, 13, 1); 
	imageList.Add(&bitmap, RGB(255,0,255)); 
	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&imageList); 
	imageList.Detach(); 
	bitmap.Detach(); 
 
	CRect rectToolBar; 
 
	// set up toolbar button sizes 
	m_wndToolBar.GetItemRect(0, &rectToolBar); 
	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(22,20)); 
 
	// add dropdown button. 
	/* 
	m_wndToolBar.AddDropDownButton(ID_BACK,		   IDR_DUMMY,   TRUE); 
	m_wndToolBar.AddDropDownButton(ID_FORWARD,	   IDR_DUMMY,   TRUE); 
	*/ 
	m_wndToolBar.SetButtonInfo(14,ID_VIEWFONT, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 8); 
	m_wndToolBar.SetButtonInfo(16,ID_VIEW_FAVORITY, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 12);	 
	//m_wndToolBar.SetButtonInfo(18,ID_SHOWTITLE, TBSTYLE_BUTTON,11); 
	 
 
	if (!m_wndStatusBar.Create(this) || 
		!m_wndStatusBar.SetIndicators(indicators, 
		  sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Failed to create status bar\n"); 
		return -1;      // fail to create 
	} 
 
	if (!m_wndAddress.Create(CBS_DROPDOWN|CBS_AUTOHSCROLL|WS_CHILD, CRect(0, 0, 400, 120), this, AFX_IDW_TOOLBAR + 1)) 
	{ 
		TRACE0("Failed to create combobox\n"); 
		return -1;      // fail to create 
	} 
	m_wndAddress.LimitText(0);		 
	InitAddress(); 
 
	// create the animation control 
	m_wndAnimate.Create(WS_CHILD|WS_VISIBLE , CRect(0, 0, 25, 25), this, AFX_IDW_TOOLBAR + 2); 
		// the AVI should be 26x26 pixels :O) 
		// test if there is an avi in the current directory available 
	m_wndAnimate.Open(IDR_NAVBAR); 
	m_wndAnimate.Play(0,-1,-1); 
	if (!m_wndReBar.Create(this) || 
		!m_wndReBar.AddBar(&m_wndMenuBar,NULL,&m_bmBarBm,RBBS_GRIPPERALWAYS) || 
		!m_wndReBar.AddBar(&m_wndAnimate,NULL,&m_bmBarBm,RBBS_FIXEDBMP | RBBS_FIXEDSIZE) || 
		!m_wndReBar.AddBar(&m_wndToolBar,NULL,&m_bmBarBm,RBBS_FIXEDBMP | RBBS_BREAK) || 
		!m_wndReBar.AddBar(&m_wndAddress,_T("地址:"),&m_bmBarBm, RBBS_FIXEDBMP | RBBS_BREAK)) 
 
	{ 
		TRACE0("Failed to create rebar\n"); 
		return -1;      // fail to create 
	}	 
	 
	// TODO: Remove this if you don't want tool tips 
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | 
		CBRS_TOOLTIPS | CBRS_FLYBY); 
	 
	m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | 
		CBRS_TOOLTIPS | CBRS_FLYBY); 
 
	m_wndReBar.SetBarStyle(m_wndReBar.GetBarStyle() | 
		CBRS_BORDER_ANY ); 
 
	m_wndTabCtrl.Create("TabCtrl","",WS_CHILD|WS_VISIBLE|FTS_HASARROWS|TCS_TOOLTIPS|FTS_HASARROWS, 
			CRect(0,0,0,0), &m_wndStatusBar,ID_TABBAR); 
 
	SetWindowPlace(); 
	 
	m_wndSysTray.Create(m_strMainWndText,AfxGetApp()->LoadIcon(IDI_SYSTRAY),IDM_SYSTRAY); 
	m_wndSysTray.SetMenuDefaultItem(0); 
//	RegisterWindowMessage(WM_SHELL_OPEN_FILE); 
	return 0; 
} 
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	if( !CFrameWnd::PreCreateWindow(cs) ) 
		return FALSE; 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
	//注册窗口类 
	WNDCLASS wndcls; 
    GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndcls); 
    wndcls.lpszClassName=_T(MAIN_WND_CLASS_NAME); 
	wndcls.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
    if (!AfxRegisterClass(&wndcls)) 
    { 
        return FALSE; 
    } 
    cs.lpszClass=_T(MAIN_WND_CLASS_NAME); 
	cs.style&=~FWS_ADDTOTITLE; 
	cs.style&=~FWS_PREFIXTITLE; 
 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame diagnostics 
 
#ifdef _DEBUG 
void CMainFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CMainFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame message handlers 
 
void CMainFrame::SetWindowPlace() 
{ 
	WINDOWPLACEMENT wpl; 
 
	wpl.length=sizeof(WINDOWPLACEMENT);		 
	wpl.ptMaxPosition.x=AfxGetApp()->GetProfileInt("Placement","MaxX",600); 
	wpl.ptMaxPosition.y=AfxGetApp()->GetProfileInt("Placement","MaxY",600); 
	wpl.ptMinPosition.x=AfxGetApp()->GetProfileInt("Placement","MinX",30); 
	wpl.ptMinPosition.y=AfxGetApp()->GetProfileInt("Placement","MinY",30); 
	wpl.rcNormalPosition.left=AfxGetApp()->GetProfileInt("Placement","Left",30); 
	wpl.rcNormalPosition.top=AfxGetApp()->GetProfileInt("Placement","Top",30); 
	wpl.rcNormalPosition.right=AfxGetApp()->GetProfileInt("Placement","Right",640); 
	wpl.rcNormalPosition.bottom=AfxGetApp()->GetProfileInt("Placement","Bottom",500); 
	wpl.showCmd=AfxGetApp()->GetProfileInt("Placement","ShowCmd",SW_SHOWMAXIMIZED); 
	wpl.flags=AfxGetApp()->GetProfileInt("Placement","Flags",0); 
	SetWindowPlacement(&wpl);	 
} 
 
void CMainFrame::SaveWindowPlace() 
{ 
	if(IsIconic()) 
		return; 
	 
	WINDOWPLACEMENT wpl; 
	wpl.length=sizeof(WINDOWPLACEMENT);	 
	GetWindowPlacement(&wpl); 
	AfxGetApp()->WriteProfileInt("Placement","MaxX",wpl.ptMaxPosition.x); 
	AfxGetApp()->WriteProfileInt("Placement","MaxY",wpl.ptMaxPosition.y); 
	AfxGetApp()->WriteProfileInt("Placement","MinX",wpl.ptMinPosition.x); 
	AfxGetApp()->WriteProfileInt("Placement","MinY",wpl.ptMinPosition.y); 
	AfxGetApp()->WriteProfileInt("Placement","Left",wpl.rcNormalPosition.left); 
	AfxGetApp()->WriteProfileInt("Placement","Top",wpl.rcNormalPosition.top); 
	AfxGetApp()->WriteProfileInt("Placement","Right",wpl.rcNormalPosition.right); 
	AfxGetApp()->WriteProfileInt("Placement","Bottom",wpl.rcNormalPosition.bottom); 
	AfxGetApp()->WriteProfileInt("Placement","ShowCmd",wpl.showCmd); 
	AfxGetApp()->WriteProfileInt("Placement","Flags",wpl.flags); 
} 
 
BOOL CMainFrame::AddHistory(LPCTSTR lpszURL, LPCTSTR lpszTitle) 
{ 
#if 0 
	HRESULT hr; 
	IUrlHistoryStg2 *puhs; 
	_bstr_t bstrUrl(lpszURL); 
	_bstr_t bstrTitle(lpszURL); 
	hr = ::CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg, (LPVOID *)&puhs); 
	if(SUCCEEDED(hr)) 
	{ 
		hr=puhs->AddUrl(bstrUrl,bstrTitle,NULL); 
		ASSERT(hr==S_OK); 
		puhs->Release(); 
		/* 
		COMBOBOXEXITEM item; 
		item.mask = CBEIF_TEXT; 
		item.iItem = -1;	// insert at the end. So the order is keeped 
		item.pszText = (LPTSTR)lpszURL; 
		m_wndAddress.InsertItem(&item); 
		*/ 
		m_pAutoEnumString->AddRef(); 
		m_pAutoEnumString->AddString(lpszURL); 
		m_pAutoEnumString->Release(); 
	} 
#endif  
 
	return TRUE; 
} 
 
void CMainFrame::SetFontSizeVal(int nVal) 
{ 
	m_nFontSize=nVal; 
} 
 
void CMainFrame::SetWindowTextX(LPCTSTR lpszText) 
{ 
	CString strText; 
	if(m_bShowTitle) 
	{		 
		strText=lpszText; 
		strText+=" - "; 
		strText+=m_strMainWndText; 
	} 
	else 
	{ 
		strText	=" -- "; 
		strText+=m_strMainWndText; 
		strText+=" -- "; 
	} 
	SetWindowText(strText); 
} 
 
 
BOOL CMainFrame::DeleteCurIEView() 
{ 
	CWnd* pWnd=GetWindow(GW_CHILD); 
	ASSERT(pWnd->IsKindOf(RUNTIME_CLASS(CContainerView))); 
	CViewManView *pView=((CContainerView*)pWnd)->m_pViewman; 
	if(m_wndTabCtrl.GetItemCount()>1) 
	{ 
		int nItemSelect=m_wndTabCtrl.GetCurSel(); 
		if(pView->DeleteView(nItemSelect)) 
		{ 
			m_wndTabCtrl.DeleteItem(nItemSelect); 
			m_wndTabCtrl.SetItemSel(pView->GetActiveView()); 
			/* 
			if(nItemSelect>0) 
			{ 
				m_wndTabCtrl.SetCurSel(nItemSelect-1); 
				pView->SetActiveView(nItemSelect-1); 
			} 
			else 
			{ 
				m_wndTabCtrl.SetCurSel(0); 
				pView->SetActiveView(0); 
			} 
			*/ 
		} 
	} 
	else 
	{			 
		m_wndTabCtrl.DeleteItem(0); 
		pView->DeleteView(0); 
		SendMessage(WM_NEW_IEVIEW); 
		((CContainerView*)pWnd)->GetAciveView()->Navigate2("about:blank",NULL,0); 
		return FALSE; 
	} 
	return TRUE; 
} 
 
BOOL CMainFrame::InitAddress() 
{ 
	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); 
} 
 
 
void CMainFrame::OnSelectAll()  
{ 
	// TODO: Add your command handler code here 
	GetActiveIEView()->ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DONTPROMPTUSER, 
		   NULL, NULL);          
} 
 
void CMainFrame::OnViewFavority()  
{ 
	// TODO: Add your command handler code here 
	static CDialogFav dlg; 
		 
	if (dlg.GetSafeHwnd() == 0)  
	{ 
 
		TCHAR           sz[MAX_PATH]; 
		TCHAR           szPath[MAX_PATH]; 
		HKEY            hKey; 
		DWORD           dwSize; 
		// find out from the registry where the favorites are located. 
		if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"), &hKey) != ERROR_SUCCESS) 
		{ 
			TRACE0("Favorites folder not found\n"); 
			return; 
		} 
		dwSize = sizeof(sz); 
		RegQueryValueEx(hKey, _T("Favorites"), NULL, NULL, (LPBYTE)sz, &dwSize); 
		ExpandEnvironmentStrings(sz, szPath, MAX_PATH); 
		RegCloseKey(hKey);		 
		dlg.m_DefaultPath.Format("%s",szPath);		 
		dlg.Create(IDD_DIALOGFAV); 
	} 
 
	dlg.ShowWindow(SW_SHOW); 
} 
 
void CMainFrame::OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult) 
{ 
	ButtonDropDown(pNotifyStruct,pResult); 
} 
 
int CMainFrame::BuildFavoritesMenu(LPCTSTR pszPath, int nStartPos, CMenu *pMenu) 
{ 
	CString         strPath(pszPath); 
	CString         strPath2; 
	CString         str; 
	WIN32_FIND_DATA wfd; 
	HANDLE          h; 
	int             nPos; 
	int             nEndPos; 
	int             nNewEndPos; 
	int             nLastDir; 
	TCHAR           buf[INTERNET_MAX_PATH_LENGTH]; 
	CStringArray    astrFavorites; 
	CStringArray    astrDirs; 
	CMenu*          pSubMenu; 
 
	 
	if(strPath[strPath.GetLength() - 1] != _T('\\')) 
		strPath += _T('\\'); 
	strPath2 = strPath; 
	strPath += "*.*"; 
 
	// 查找目录,首先查找.URL文件,然后查找子目录中的.URL文件 
	h = FindFirstFile(strPath, &wfd); 
	if(h != INVALID_HANDLE_VALUE) 
	{ 
		nEndPos = nStartPos; 
		do 
		{ 
			if((wfd.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))==0) 
			{ 
				str = wfd.cFileName; 
				if(str.Right(4) == _T(".url")) 
				{ 
					::GetPrivateProfileString(_T("InternetShortcut"), _T("URL"), 
											  _T(""), buf, INTERNET_MAX_PATH_LENGTH, 
											  strPath2 + str); 
					str = str.Left(str.GetLength() - 4); 
 
					for(nPos = nStartPos ; nPos < nEndPos ; ++nPos) 
					{ 
						if(str.CompareNoCase(astrFavorites[nPos]) < 0) 
							break; 
					} 
					astrFavorites.InsertAt(nPos, str); 
					m_astrFavoriteURLs.InsertAt(nPos, buf); 
					++nEndPos; 
				} 
			} 
		} while(FindNextFile(h, &wfd)); 
		FindClose(h); 
		// 把查到的选项增加到菜单中 
		for(nPos = nStartPos ; nPos < nEndPos ; ++nPos) 
		{ 
			pMenu->AppendMenu(MF_STRING | MF_ENABLED, 0xe00 + nPos, astrFavorites[nPos]); 
		} 
 
 
		//已经处理完所有的.URL文件,下面查找子目录 
		nLastDir = 0; 
		h = FindFirstFile(strPath, &wfd); 
		ASSERT(h != INVALID_HANDLE_VALUE); 
		do 
		{ 
			if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
			{ 
				// 忽略当前目录和父目录项 
				if(lstrcmp(wfd.cFileName, _T(".")) == 0 || lstrcmp(wfd.cFileName, _T("..")) == 0) 
					continue; 
 
				for(nPos = 0 ; nPos < nLastDir ; ++nPos) 
				{ 
					if(astrDirs[nPos].CompareNoCase(wfd.cFileName) > 0) 
						break; 
				} 
				pSubMenu = new CMenu; 
				pSubMenu->CreatePopupMenu(); 
 
				//递归调用函数 
				nNewEndPos = BuildFavoritesMenu(strPath2 + wfd.cFileName, nEndPos, pSubMenu); 
				if(nNewEndPos != nEndPos) 
				{ 
					//只插入有.URL文件的子目录到菜单中 
					nEndPos = nNewEndPos; 
					pMenu->InsertMenu(nPos, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)pSubMenu->m_hMenu, wfd.cFileName); 
					pSubMenu->Detach(); 
					astrDirs.InsertAt(nPos, wfd.cFileName); 
					++nLastDir; 
				} 
				delete pSubMenu; 
			} 
		} while(FindNextFile(h, &wfd)); 
		FindClose(h); 
	} 
	return nEndPos; 
} 
 
void CMainFrame::OnNewAddressEnter() 
{ 
	CString str; 
	m_wndAddress.GetWindowText(str); 
	if (str.GetLength() == 0) 
		return; 
	GetActiveIEView()->ReadUrlDocument(str); 
} 
 
void CMainFrame::OnAddressChange() 
{ 
	 
} 
 
void CMainFrame::OnNewAddress() 
{ 
	CString str; 
	m_wndAddress.GetLBText(m_wndAddress.GetCurSel(), str); 
	if (str.GetLength() == 0) 
		return; 
	GetActiveIEView()->ReadUrlDocument(str); 
} 
 
void CMainFrame::OnInetOption()  
{ 
	// TODO: Add your command handler code here 
	IShellDispatch* disp; 
	HRESULT hr; 
	hr = CoCreateInstance( CLSID_Shell, NULL, CLSCTX_SERVER, 
	IID_IDispatch, (LPVOID*)&disp ) ; 
	if (FAILED (hr)) 
	{ 
		CString str; 
		str.Format(_T("Failed to create Instance :-( ")); 
		TRACE( str) ; 
		return; 
	} 
	hr=disp->ControlPanelItem(_bstr_t("inetcpl.cpl")); 
	disp->Release(); 
} 
 
void CMainFrame::OnAddtoFav()  
{ 
	// TODO: Add your command handler code here 
	IShellUIHelper* pShellUIHelper; 
	HRESULT hr = CoCreateInstance(CLSID_ShellUIHelper, NULL, CLSCTX_INPROC_SERVER, 
								 IID_IShellUIHelper, (LPVOID*)&pShellUIHelper); 
 
	if (SUCCEEDED(hr)) 
	{ 
	  CIEView* pView = GetActiveIEView(); 
 
	  _variant_t vtTitle(pView->GetTitle().AllocSysString()); 
	  CString strURL = pView->GetLocationURL(); 
 
	  hr = pShellUIHelper->AddFavorite(strURL.AllocSysString(), &vtTitle);   
 
	  pShellUIHelper->Release(); 
	} 
} 
 
void CMainFrame::OnSettingFav()  
{ 
	// TODO: Add your command handler code here 
	HMODULE hMod = (HMODULE)LoadLibrary("shdocvw.dll"); 
   if (hMod) 
   { 
      LPFNORGFAV lpfnDoOrganizeFavDlg = (LPFNORGFAV)GetProcAddress(hMod, "DoOrganizeFavDlg"); 
      if (lpfnDoOrganizeFavDlg) 
      { 
         TCHAR szPath[MAX_PATH]; 
 
         HRESULT hr = SHGetSpecialFolderPath(m_hWnd, szPath, CSIDL_FAVORITES, TRUE); 
         if (SUCCEEDED(hr)) 
         { 
            lpfnDoOrganizeFavDlg(m_hWnd, szPath);            
         } 
      } 
      FreeLibrary(hMod); 
   } 
} 
 
void CMainFrame::OnDocSaveAs()  
{ 
	// TODO: Add your command handler code here 
	COleVariant	bstr; 
	GetActiveIEView()->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, &bstr, NULL);	 
} 
 
 
void CMainFrame::OnEditFind()  
{ 
	// TODO: Add your command handler code here 
	MSHTML::IHTMLDocument2Ptr    ptrDoc; 
    _variant_t    varInput; 
    _variant_t    varOutput; 
    IOleCommandTarget    *pCMD; 
    HRESULT        hr; 
 
    ptrDoc = GetActiveIEView()->GetHtmlDocument(); 
    hr = ptrDoc.QueryInterface(IID_IOleCommandTarget, &pCMD); 
    if(SUCCEEDED(hr)) 
    { 
        varInput = _T(""); 
        hr = pCMD->Exec(&CGID_MSHTML, IDM_FIND, OLECMDEXECOPT_DODEFAULT, &varInput, &varOutput); 
    } 
} 
 
void CMainFrame::OnCloseWindow()  
{ 
	// TODO: Add your command handler code here 
	DeleteCurIEView(); 
} 
 
void CMainFrame::OnCloseAll()  
{ 
	// TODO: Add your command handler code here 
	while(DeleteCurIEView()); 
} 
 
void CMainFrame::OnShowtitle()  
{ 
	// TODO: Add your command handler code here 
	if(m_bShowTitle) 
	{ 
		m_bShowTitle=0; 
	} 
	else 
	{ 
		m_bShowTitle=1; 
	} 
} 
 
 
 
void CMainFrame::OnUpdateShowtitle(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->SetCheck(m_bShowTitle); 
} 
 
void CMainFrame::OnShowMainwnd()  
{ 
	// TODO: Add your command handler code here 
	if(!IsWindowVisible()) 
	{ 
		if(IsIconic()) 
		{ 
			ShowWindow(SW_RESTORE); 
		} 
		else 
		{ 
			ShowWindow(SW_SHOW); 
		} 
		SetForegroundWindow();		 
	} 
	else 
	{ 
		ShowWindow(SW_HIDE); 
	} 
} 
 
void CMainFrame::OnSetdefaultid()  
{ 
	// TODO: Add your command handler code here 
	GetActiveIEView()->SetRegisterAsBrowser(TRUE);	 
} 
 
void CMainFrame::OnUpdateSetdefaultid(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->SetCheck(GetActiveIEView()->GetRegisterAsBrowser()); 
} 
 
 
 
void CMainFrame::EnableGoBack(BOOL bEnable) 
{ 
	m_bEnableGoBack=bEnable; 
} 
 
void CMainFrame::EnableGoForward(BOOL bEnable) 
{ 
	m_bEnableGoForward=bEnable; 
} 
 
void CMainFrame::OnUpdateBack(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(m_bEnableGoBack); 
} 
 
void CMainFrame::OnUpdateForward(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(m_bEnableGoForward); 
} 
 
 
LRESULT CMainFrame::OnCopyDataFromApp(WPARAM wParam,LPARAM lParam) 
{ 
	PCOPYDATASTRUCT pcs=(PCOPYDATASTRUCT)lParam; 
	char *szUrl=(char*)pcs->lpData; 
	LRESULT ret=SendMessage(WM_NEW_IEVIEW); 
	CIEView* pView=(CIEView*)ret; 
	if(pView) 
		pView->ReadUrlDocument(szUrl); 
	return 1; 
} 
 
void CMainFrame::ButtonDropDown(NMHDR* pNotifyStruct, LRESULT* pResult) 
{ 
	// this function handles the dropdown menus from the toolbar 
	NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStruct; 
	CRect rect; 
 
	// translate the current toolbar item rectangle into screen coordinates 
	// so that we'll know where to pop up the menu 
	m_wndToolBar.GetToolBarCtrl().GetRect(pNMToolBar->iItem, &rect); 
	rect.top = rect.bottom; 
	::ClientToScreen(pNMToolBar->hdr.hwndFrom, &rect.TopLeft()); 
	if(pNMToolBar->iItem == ID_VIEWFONT) 
	{ 
		CMenu menu; 
		CMenu* pPopup; 
 
		// the font popup is stored in a resource 
		menu.LoadMenu(IDR_FONT_POPUP); 
		pPopup = menu.GetSubMenu(0); 
		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, rect.left, rect.top + 1, AfxGetMainWnd()); 
	} 
 
	if(pNMToolBar->iItem == ID_VIEW_FAVORITY) 
	{ 
		CMenu menu; 
		CMenu* pPopup=NULL; 
 
		// the font popup is stored in a resource 
		menu.LoadMenu(IDR_FONT_POPUP); 
		pPopup = menu.GetSubMenu(1); 
		// 建立收藏夹菜单 
		TCHAR           sz[MAX_PATH]; 
		TCHAR           szPath[MAX_PATH]; 
		HKEY            hKey; 
		DWORD           dwSize; 
		m_astrFavoriteURLs.RemoveAll(); 
		while(pPopup->DeleteMenu(0, MF_BYPOSITION)); 
 
		// 从注册表中查找收藏夹内容 
		if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"), &hKey) != ERROR_SUCCESS) 
		{ 
			TRACE0("Favorites folder not found\n"); 
			return; 
		} 
		dwSize = sizeof(sz); 
		RegQueryValueEx(hKey, _T("Favorites"), NULL, NULL, (LPBYTE)sz, &dwSize); 
		ExpandEnvironmentStrings(sz, szPath, MAX_PATH); 
		RegCloseKey(hKey); 
		//建立收藏夹菜单 
		BuildFavoritesMenu(szPath, 0, pPopup); 
		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, rect.left, rect.top + 1, AfxGetMainWnd()); 
	} 
 
	*pResult = TBDDRET_DEFAULT; 
} 
 
void CMainFrame::OnSetActiveNewWnd()  
{ 
	// TODO: Add your command handler code here 
	if(m_bActvieNew) 
	{ 
		m_bActvieNew=0; 
	} 
	else 
	{ 
		m_bActvieNew=1; 
	}	 
} 
 
void CMainFrame::OnUpdateSetActiveNewWnd(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->SetCheck(m_bActvieNew);	 
}