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

📄 mainfrm.cpp

📁 波子浏览器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 <urlhist.h>
#include <comdef.h>

#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()
{

⌨️ 快捷键说明

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