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

📄 mainfrm.cpp

📁 类似Linux操作系统0.11版文件系统的文件系统设计和Windows下的操作程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "ULExplorer.h"
#include "MainFrm.h"

#include "ULExplorerDoc.h"
#include "ULExplorerView.h"
#include "BlockInfoView.h"
#include "SystemInfoView.h"
#include "CreatVDiskDlg.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_COMMAND(ID_THEME_OFFICE2000, OnThemeOffice2000)
	ON_UPDATE_COMMAND_UI(ID_THEME_OFFICE2000, OnUpdateThemeOffice2000)
	ON_COMMAND(ID_THEME_OFFICEXP, OnThemeOfficexp)
	ON_UPDATE_COMMAND_UI(ID_THEME_OFFICEXP, OnUpdateThemeOfficexp)
	ON_COMMAND(ID_THEME_OFFICE2003, OnThemeOffice2003)
	ON_UPDATE_COMMAND_UI(ID_THEME_OFFICE2003, OnUpdateThemeOffice2003)
	ON_COMMAND(ID_THEME_NATIVEXP, OnThemeNativexp)
	ON_UPDATE_COMMAND_UI(ID_THEME_NATIVEXP, OnUpdateThemeNativexp)
	ON_WM_CLOSE()
	ON_MESSAGE(XTPWM_SHORTCUTBAR_NOTIFY, OnShortcutBarNotify)
	//ON_COMMAND(ID_THEME_CLIENTPANE, OnThemeClientpane)
	//ON_UPDATE_COMMAND_UI(ID_THEME_CLIENTPANE, OnUpdateThemeClientpane)
	//////////////////////////////////////////////////////////////////////////
	ON_COMMAND(ID_GOTO_BTN, OnGotoBtn)
	ON_COMMAND(ID_LOAD_VDISK, OnLoadVDisk)
	ON_COMMAND(ID_UNLOAD_VDISK, OnUnLoadVDisk)
	ON_COMMAND(ID_DENTRY_UP, OnDentryUp)
	ON_COMMAND(ID_DELETE, OnDelete)
	ON_COMMAND(ID_SECURITY, OnSecurity)

	//}}AFX_MSG_MAP
	//ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
	ON_XTP_CREATECONTROL()
	ON_XTP_EXECUTE(ID_GOTO_URL, OnAddressBarEnter)
	ON_COMMAND(ID_CREATE_VDISK, OnCreateVdisk)
	ON_WM_GETMINMAXINFO()
	ON_COMMAND(ID_HELP_CHM, OnHelpChm)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	//ID_INDICATOR_CAPS,
	//ID_INDICATOR_NUM,
	//ID_INDICATOR_SCRL,
};

static UINT shortcuts[] =
{	
	999,
	ID_SHORTCUT_BLOCKS_INFO,
	ID_SHORTCUT_SYSTEM_INFO,
	998,
	997,
	ID_SHORTCUT_FOLDERS,
	
};

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

CMainFrame::CMainFrame()
{
	m_bClientPane = TRUE;
	m_bAddressBarLoaded = FALSE;
	m_pFoldersView = NULL;
	m_pBlocksInfoView = NULL;
	m_pSystemInfoView = NULL;

}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	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 (!InitCommandBars())
		return -1;

	CXTPPaintManager::SetTheme(xtpThemeOffice2003);

	CXTPCommandBars* pCommandBars = GetCommandBars();
	
	// 主菜单
	CXTPMenuBar* pMenuBar = pCommandBars->SetMenu(_T("主菜单"), IDR_MAINFRAME); 
	pMenuBar->EnableDocking(xtpFlagStretched|xtpFlagHideWrap);

	// 标准工具栏
	CXTPToolBar* pStandardBar = (CXTPToolBar*)pCommandBars->Add(_T("标准工具栏"), xtpBarTop);
	if (!pStandardBar || !pStandardBar->LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
	}
	pStandardBar->EnableDocking(xtpFlagStretched|xtpFlagHideWrap);
	for (int i=0; i<6; i++) 
	{
		((CXTPControlButton*)pStandardBar->GetControl(i))->SetStyle(xtpButtonIconAndCaption);
	}

	// 地址栏
	CXTPToolBar* pAddressBar = (CXTPToolBar*)pCommandBars->Add(_T("地址栏"), xtpBarTop);
	if (!pAddressBar ||	!pAddressBar->LoadToolBar(IDR_ADDRESS_BAR))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;
	}
	pAddressBar->EnableDocking(xtpFlagStretched|xtpFlagHideWrap);

	pCommandBars->GetCommandBarsOptions()->bShowExpandButtonAlways = FALSE;

	UINT nCommands[] = {ID_LOAD_VDISK, ID_UNLOAD_VDISK, ID_DENTRY_UP, ID_DELETE, ID_SECURITY, ID_APP_ABOUT, ID_CREATE_VDISK};
	XTPImageManager()->SetIcons(IDB_TOOLBAR_BIG, nCommands, sizeof(nCommands)/sizeof(UINT), CSize(32, 32) );
	XTPImageManager()->SetIcons(IDB_TOOLBAR_SM, nCommands, sizeof(nCommands)/sizeof(UINT), CSize(16, 16) );

	// Load the previous state for command bars.
	LoadCommandBars(_T("CommandBars"));

	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
	cs.style |= WS_CLIPSIBLINGS|WS_CLIPCHILDREN;

	return TRUE;
}

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

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

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

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// 初始化侧边栏
void CMainFrame::CreateShortcutBar()
{
	m_wndShortcutBar.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CRect(0, 0, 0, 0), 
		&m_wndSplitter,  m_wndSplitter.IdFromRowCol(0, 0));

	m_wndShortcutBar.SetOwner(this);

	m_wndShortcutBar.SetExpandedLinesCount(4);

	// Alpha 图标支持
	if (XTPImageManager()->IsAlphaIconsSupported())
	{
		XTPImageManager()->SetIcons(IDB_SHORTCUTS_SMALL_ALPHA, shortcuts, sizeof(shortcuts), CSize(16, 16));
		XTPImageManager()->SetIcons(IDB_SHORTCUTS_BIG_ALPHA, shortcuts, sizeof(shortcuts), CSize(24, 24));
	} 
	else
	{
		COLORREF clr = XTPImageManager()->SetMaskColor(RGB(0, 128, 128));
		XTPImageManager()->SetIcons(IDB_SHORTCUTS_SMALL, shortcuts, sizeof(shortcuts), CSize(16, 16));	
		XTPImageManager()->SetIcons(IDB_SHORTCUTS_BIG, shortcuts, sizeof(shortcuts), CSize(24, 24));	
		XTPImageManager()->SetMaskColor(clr);
	}

	VERIFY(m_paneFolders.Create(_T("文件夹列表"), &m_wndShortcutBar));
	VERIFY(m_paneSystemInfo.Create(_T("文件系统信息"), &m_wndShortcutBar));
	VERIFY(m_paneBlocksInfo.Create(_T("磁盘块信息"), &m_wndShortcutBar));
	

	CXTPShortcutBarItem* pItemFloders = m_wndShortcutBar.AddItem(ID_SHORTCUT_FOLDERS, &m_paneFolders);
	m_wndShortcutBar.AddItem(ID_SHORTCUT_SYSTEM_INFO, &m_paneSystemInfo);
	m_wndShortcutBar.AddItem(ID_SHORTCUT_BLOCKS_INFO, &m_paneBlocksInfo);

	m_wndShortcutBar.SelectItem(pItemFloders);
	m_wndShortcutBar.LoadState(_T("侧边栏"));
}
// 客户区创建
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) 
{
	// 主分割
	m_wndSplitter.CreateStatic(this, 1, 2);

	CreateShortcutBar();

	m_wndSplitter.SetColumnInfo(0, 250, 50);

	m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CULExplorerView), CSize(0, 0), pContext);

	m_pFoldersView = (CULExplorerView*)m_wndSplitter.GetPane(0, 1);

	m_pFoldersView->SetFoldersPane(&m_paneFolders);
	m_paneFolders.SetFoldersView(m_pFoldersView);

	XTThemeManager()->SetTheme(xtThemeOffice2003);


	//DWORD dw = m_wndSplitter.GetSplitterStyle();

	//dw |= XT_SPLIT_NOSIZE;

	//m_wndSplitter.SetSplitterStyle(dw);

	return TRUE;
}

void CMainFrame::OnThemeOffice2000() 
{
	XTPPaintManager()->SetTheme(xtpThemeOffice2000);
	m_wndShortcutBar.SetTheme(xtpShortcutThemeOffice2000);

	XTThemeManager()->SetTheme(xtThemeDefault);


	GetCommandBars()->RedrawCommandBars();
	RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
	
}

void CMainFrame::OnUpdateThemeOffice2000(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOffice2000);
}

void CMainFrame::OnThemeOfficexp() 
{
	XTPPaintManager()->SetTheme(xtpThemeOfficeXP);
	m_wndShortcutBar.SetTheme(xtpShortcutThemeOfficeXP);

	XTThemeManager()->SetTheme(xtThemeOfficeXP);

	GetCommandBars()->RedrawCommandBars();	
	RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
	
}

void CMainFrame::OnUpdateThemeOfficexp(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOfficeXP);
	
}

void CMainFrame::OnThemeOffice2003() 
{
	XTPPaintManager()->SetTheme(xtpThemeOffice2003);
	m_wndShortcutBar.SetTheme(xtpShortcutThemeOffice2003);

	XTThemeManager()->SetTheme(xtThemeOffice2003);

	GetCommandBars()->RedrawCommandBars();	
	RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
	
}

void CMainFrame::OnUpdateThemeOffice2003(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeOffice2003);
	
}

void CMainFrame::OnThemeNativexp() 
{
	XTPPaintManager()->SetTheme(xtpThemeNativeWinXP);	
	m_wndShortcutBar.SetTheme(xtpShortcutThemeOffice2000);
	GetCommandBars()->RedrawCommandBars();	
	RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
}

void CMainFrame::OnUpdateThemeNativexp(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(XTPPaintManager()->GetCurrentTheme() == xtpThemeNativeWinXP);
	
}

void CMainFrame::OnClose() 
{	
	OnUnLoadVDisk();
	CFrameWnd::OnClose();
}
// 处理侧边栏选择消息
LRESULT CMainFrame::OnShortcutBarNotify(WPARAM wParam, LPARAM lParam)
{
	switch (wParam)
	{
		// 选择项改变
	case XTP_SBN_SELECTION_CHANGING:
		{
			CXTPShortcutBarItem* pItem = (CXTPShortcutBarItem*)lParam;
			TRACE(_T("Selection Changing. Item.Caption = %s\n"), pItem->GetCaption());

			if (pItem->GetCaption()=="文件夹列表")
			{
				SwitchToFoldersView();
			}
			else if (pItem->GetCaption()=="文件系统信息")
			{
				SwitchToSystemInfoView();
			}
			else
			{
				SwitchToBlockInfoView();
			}
		}
		return TRUE;
		// 右键
	case XTP_SBN_RCLICK:
		{
			/*
			CPoint point(lParam);
			CXTPShortcutBarItem* pItem = m_wndShortcutBar.HitTest(point);
			if (pItem)
			{
				TRACE(_T("RClick. Item.ID = %i\n"), pItem->GetID());

				CMenu mnu;
				mnu.LoadMenu(IDR_POPUP_MENU);

				m_wndShortcutBar.ClientToScreen(&point);

				CXTPCommandBars::TrackPopupMenu(mnu.GetSubMenu(0), 0, point.x, point.y, AfxGetMainWnd());

			}
			*/

⌨️ 快捷键说明

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