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

📄 mainfrm.cpp

📁 VC++实现的多页面浏览器....实现了多种功能
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "IE6mdi.h"

#include "MainFrm.h"
#include "IE6mdiview.h"
#include "ViewManager.h"
#include "DialogAutoSave.h"

#ifndef _FAVDIALOG
#include "DialogFav.h"
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(IDOK, OnNewAddressEnter)
	ON_COMMAND(ID_FILE_OPENURLLIST2, OnFileOpenurllist)
	ON_COMMAND(ID_FILE_SAVEURLLIST2, OnFileSaveurllist)
	ON_COMMAND(ID_FILE_OPENADOCUMENT2, OnFileOpenadocument)
	ON_COMMAND(ID_FILE_CHANGETHELOGO, OnFileChangethelogo)
	ON_COMMAND(ID_FILE_DEFAULTLOGO, OnFileDefaultlogo)
	ON_COMMAND(ID_POPUP_WINDOW, OnNothing)
	ON_WM_CLOSE()
	ON_WM_SIZE()
	ON_COMMAND(ID_WINDOW_AUTOSAVE, OnWindowAutosave)
	ON_COMMAND(ID_WINDOW_WINDOWLIST, OnMyWindowList)
	ON_COMMAND(ID_POPUP_WINDOW_OFF, OnNothing)
	ON_COMMAND(ID_MANAGE, OnMyWindowList)
	ON_COMMAND(ID_FAVFLOAT, OnFavFloat)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
	ON_CBN_SELENDOK(AFX_IDW_TOOLBAR + 1,OnNewAddress)
	ON_CBN_EDITCHANGE(AFX_IDW_TOOLBAR + 1,OnDebug)
	ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)
	//ON_COMMAND(IDOK, OnNewAddressEnter)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // opened windows: 0
	ID_SEPARATOR,           // status line indicator: 1
	ID_SEPARATOR			// indicator for autosave
//	ID_INDICATOR_CAPS,
//	ID_INDICATOR_NUM,
//	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_delay = AfxGetApp()->GetProfileInt("Settings","Autosave_delay",60);
	m_file = AfxGetApp()->GetProfileString("Settings","Autosave_file","");;
}

CMainFrame::~CMainFrame()
{
}


/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::OnNothing()
//
// PURPOSE	 : called when no more view and when the user wants to change the
//	state of PopupWindow
//
// PARAMETERS : none
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::OnNothing()
{

	int m_iPopup = AfxGetApp()->GetProfileInt("Settings","NoPopupWindow",1);
	if (m_iPopup == 1) {
		m_wndToolBar.SetButtonInfo(8, ID_POPUP_WINDOW, TBSTYLE_BUTTON, 13);
		AfxGetApp()->WriteProfileInt("Settings","NoPopupWindow",0);
	}
	else {
		m_wndToolBar.SetButtonInfo(8, ID_POPUP_WINDOW_OFF, TBSTYLE_BUTTON, 14);
		AfxGetApp()->WriteProfileInt("Settings","NoPopupWindow",1);
	}

}

/*
*******************************************************************************/
// FUNCTION : int  CMainFrame::OnCreate(LPCREATESTRUCT)
//
// PURPOSE	 : create all the toolbars and other stuffs
//
// PARAMETERS : 
//		lpCreateStruct		- 
//
// RETURN VALUE : int 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{

	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	///////////// create the toolbar :O)
	CImageList img;
	CString str;

	if (!m_wndToolBar.CreateEx(this))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	// set up toolbar properties
	// every button is 22 pixels large :O)
	m_wndToolBar.GetToolBarCtrl().SetButtonWidth(20, 200);
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

	img.Create(IDB_HOTTOOLBAR, 22, 0, RGB(255, 0, 255));
	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
	img.Detach();
	img.Create(IDB_COLDTOOLBAR, 22, 0, RGB(255, 0, 255));
	m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
	img.Detach();
	m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);

	m_wndToolBar.SetButtons(NULL, 12);
	m_wndToolBar.SetButtonInfo(1, ID_GO_BACK, TBSTYLE_BUTTON, 0);
	m_wndToolBar.SetButtonInfo(2, ID_GO_FORWARD, TBSTYLE_BUTTON, 1);
	m_wndToolBar.SetButtonInfo(3, ID_VIEW_STOP, TBSTYLE_BUTTON, 2);
	m_wndToolBar.SetButtonInfo(4, ID_VIEW_REFRESH, TBSTYLE_BUTTON, 3);
	m_wndToolBar.SetButtonInfo(5, ID_GO_START_PAGE, TBSTYLE_BUTTON, 4);
	m_wndToolBar.SetButtonInfo(6, ID_KILL_ALL, TBSTYLE_BUTTON, 10);
	m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW2, TBSTYLE_BUTTON, 6);
	m_wndToolBar.SetButtonInfo(7, ID_MANAGE, TBSTYLE_BUTTON, 11);
	int m_iPopup = AfxGetApp()->GetProfileInt("Settings","NoPopupWindow",1);
	if (m_iPopup == 1)
		m_wndToolBar.SetButtonInfo(8, ID_POPUP_WINDOW_OFF, TBSTYLE_BUTTON, 14); // 13: off, 14:on
	else
		m_wndToolBar.SetButtonInfo(8, ID_POPUP_WINDOW, TBSTYLE_BUTTON, 13); // 13: off, 14:on
	m_wndToolBar.SetButtonInfo(9, ID_PRINT, TBSTYLE_BUTTON, 7);
	m_wndToolBar.SetButtonInfo(10, ID_FONT_DROPDOWN, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 8);
	m_wndToolBar.SetButtonInfo(11, ID_FAVFLOAT, TBSTYLE_BUTTON, 12);

	CRect rectToolBar;

	// set up toolbar button sizes
	m_wndToolBar.GetItemRect(0, &rectToolBar);
	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(22,22)); // rectToolBar.Size() first argument

	// Address bar creation (combobox)
	if (!m_wndAddress.Create(CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1))
	{
		TRACE0("Failed to create combobox\n");
		return -1;      // fail to create
	}
	m_wndAddress.LimitText(0);
	GetURL(); // restore the history
	

	// 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
	CWinApp* pApp = AfxGetApp();
	CString AVIfile = pApp->GetProfileString("Settings","AVI default file","");
	if (!m_wndAnimate.Open(AVIfile)) // if no AVI we open the default
		m_wndAnimate.Open(IDR_MFCAVI);
	IsLogoPlayed = 0;

	if (!m_wndReBar.Create(this) ||
		!m_wndReBar.AddBar(&m_wndToolBar) ||
		!m_wndReBar.AddBar(&m_wndAddress, CString(LPCTSTR(IDS_ADDRESS)))||
		!m_wndReBar.AddBar(&m_wndAnimate, NULL, NULL, RBBS_FIXEDSIZE | RBBS_FIXEDBMP)) // RBBS_FIXEDSIZE | RBBS_FIXEDBMP
	{
		TRACE0("Failed to create rebar\n");
		return -1;      // fail to create
	}

	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY);

	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
	}

		// modify the style of the status bar
		//SBPS_NORMAL   
	UINT Id,Style;
	int Width,NewZero;
	m_wndStatusBar.GetPaneInfo(0,Id,Style,Width);
	NewZero = (Width*4)/5;
	m_wndStatusBar.SetPaneInfo(0,Id,0,NewZero);

	m_wndStatusBar.GetPaneInfo(1,Id,Style,Width);
	m_wndStatusBar.SetPaneInfo(1,Id,SBPS_STRETCH,Width);

	m_wndStatusBar.GetPaneInfo(2,Id,Style,Width);
	m_wndStatusBar.SetPaneInfo(2,Id,SBPS_NORMAL,15); //autosave

	/////////////////////////////////////////////////////////
	theWindowTab.Create(WS_CHILD|WS_VISIBLE|TCS_BUTTONS
		|TCS_FIXEDWIDTH|TCS_SINGLELINE
		|TCS_FORCELABELLEFT,
		CRect(0,0,0,0), &m_wndStatusBar, 1000); 
	/////////////////////////////////////////////////////////

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{

	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::OnNewAddress()
//
// PURPOSE	 : called when the user select a old address from the history
//		go to this address. Open in the current window or open a new one if no more
//		window active
//
// PARAMETERS : none
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::OnNewAddress()
{
	// gets called when an item in the Address combo box is selected
	// just navigate to the newly selected location.
	CString str;

	m_wndAddress.GetLBText(m_wndAddress.GetCurSel(), str);
	if (str.GetLength() == 0)
		return;

	////////////////////////////////////////////////////
	// retrieve the active view, little bit hard in MDI
	////////////////////////////////////////////////////
	CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
	CIE6mdiView *pView = (CIE6mdiView *) pChild->GetActiveView();
	
	if (pView == NULL) {
		// we need to create a new window
		AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,(LPARAM)NULL);
		pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
		pView = (CIE6mdiView *) pChild->GetActiveView();
		pView->Navigate2(str);
		return;
	}
	else
		pView->Navigate2(str);
}


/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::OnNewAddressEnter()
//
// PURPOSE	 : go to the URL just entered in the address bar, add the new address
//	to the history. Open in the current window or open a new one if no more
//		window active
//
// PARAMETERS : none
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::OnNewAddressEnter()
{
	// gets called when an item is entered manually into the edit box portion
	// of the Address combo box.
	// navigate to the newly selected location and also add this address to the
	// list of addresses in the combo box.
	CString str;

	m_wndAddress.GetEditCtrl()->GetWindowText(str);
	if (str.GetLength() == 0)
		return;

	str = CheckUrl(str);
	AddURL(str);

	////////////////////////////////////////////////////
	// retrieve the active view, little bit hard in MDI
	////////////////////////////////////////////////////
	CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
	// Get the active view attached to the active MDI child
	// window.
	CIE6mdiView *pView = (CIE6mdiView *) pChild->GetActiveView();

	if (pView == NULL) {
		AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,(LPARAM)NULL);
		pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
		pView = (CIE6mdiView *) pChild->GetActiveView();
		pView->Navigate2(str);
		return;
	}
	else
		pView->Navigate2(str);

	// add the URL the the history
	COMBOBOXEXITEM item;

	item.mask = CBEIF_TEXT;
	item.iItem = 0; // not -1; we add in head position
	item.pszText = (LPTSTR)(LPCTSTR)str;
	m_wndAddress.InsertItem(&item);
}



/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::StopAnimation()
//
// PURPOSE	 : stop the AVI animation
//
// PARAMETERS : none
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::StopAnimation()
{
	m_wndAnimate.Stop();
	m_wndAnimate.Seek(0);
	IsLogoPlayed = 0;
}


/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::StartAnimation()
//
// PURPOSE	 : start the AVI animation
//
// PARAMETERS : none
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::StartAnimation()
{
	m_wndAnimate.Play(0, -1, -1);
	IsLogoPlayed = 1;
}


/*
*******************************************************************************/
// FUNCTION : void  CMainFrame::SetAddress(LPCTSTR)
//
// PURPOSE	 : update the Address bar
//
// PARAMETERS : 
//		lpszUrl	- new URL to display
//
// RETURN VALUE : void 
//
//
// COMMENTS : 
//
//
/*******************************************************************************
*/
void CMainFrame::SetAddress(LPCTSTR lpszUrl)
{

⌨️ 快捷键说明

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