📄 mainfrm.cpp
字号:
// 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 + -