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

📄 filewindow.cpp

📁 Crimson编辑器的英文版,完成从韩文版变成英文版的移植,并且附带可执行文件和注册表文件,无需原先的安装包,是改写编辑器的最理想选择.
💻 CPP
字号:
// FileWindow.cpp : implementation file
//

#include "stdafx.h"
#include "cedtHeader.h"

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


CFileWindow::CFileWindow()
{
	memset( m_tbiToolbarDirectory, 0x00, sizeof(m_tbiToolbarDirectory) );
	memset( m_tbiToolbarProject, 0x00, sizeof(m_tbiToolbarProject) );
	memset( m_tbiWinButtons, 0x00, sizeof(m_tbiWinButtons) );

	m_tbiToolbarDirectory[0].iBitmap = 0;
	m_tbiToolbarDirectory[0].idCommand = ID_DIRECTORY_ITEM_REFRESH;
	m_tbiToolbarDirectory[0].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[0].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarDirectory[1].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[1].fsStyle = TBSTYLE_SEP;

	m_tbiToolbarDirectory[2].iBitmap = 1;
	m_tbiToolbarDirectory[2].idCommand = ID_DIRECTORY_ITEM_COPY;
	m_tbiToolbarDirectory[2].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[2].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarDirectory[3].iBitmap = 2;
	m_tbiToolbarDirectory[3].idCommand = ID_DIRECTORY_ITEM_MOVE;
	m_tbiToolbarDirectory[3].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[3].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarDirectory[4].iBitmap = 3;
	m_tbiToolbarDirectory[4].idCommand = ID_DIRECTORY_ITEM_DELETE;
	m_tbiToolbarDirectory[4].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[4].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarDirectory[5].fsState = TBSTATE_ENABLED;
	m_tbiToolbarDirectory[5].fsStyle = TBSTYLE_SEP;

	m_tbiToolbarProject[0].iBitmap = 0;
	m_tbiToolbarProject[0].idCommand = ID_PROJECT_NEW_CATEGORY;
	m_tbiToolbarProject[0].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[0].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarProject[1].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[1].fsStyle = TBSTYLE_SEP;

	m_tbiToolbarProject[2].iBitmap = 1;
	m_tbiToolbarProject[2].idCommand = ID_PROJECT_ADD_FILES_TO;
	m_tbiToolbarProject[2].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[2].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarProject[3].iBitmap = 2;
	m_tbiToolbarProject[3].idCommand = ID_PROJECT_ADD_ACTIVE_FILE;
	m_tbiToolbarProject[3].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[3].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarProject[4].iBitmap = 3;
	m_tbiToolbarProject[4].idCommand = ID_PROJECT_ADD_OPEN_FILES;
	m_tbiToolbarProject[4].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[4].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarProject[5].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[5].fsStyle = TBSTYLE_SEP;

	m_tbiToolbarProject[6].iBitmap = 4;
	m_tbiToolbarProject[6].idCommand = ID_PROJECT_ITEM_REMOVE;
	m_tbiToolbarProject[6].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[6].fsStyle = TBSTYLE_BUTTON;

	m_tbiToolbarProject[7].fsState = TBSTATE_ENABLED;
	m_tbiToolbarProject[7].fsStyle = TBSTYLE_SEP;

	m_tbiWinButtons[0].iBitmap = 0;
	m_tbiWinButtons[0].idCommand = ID_FILE_WINDOW_SYNC;
	m_tbiWinButtons[0].fsState = TBSTATE_ENABLED;
	m_tbiWinButtons[0].fsStyle = TBSTYLE_BUTTON;

	m_tbiWinButtons[1].iBitmap = 1;
	m_tbiWinButtons[1].idCommand = ID_FILE_WINDOW_HIDE;
	m_tbiWinButtons[1].fsState = TBSTATE_ENABLED;
	m_tbiWinButtons[1].fsStyle = TBSTYLE_BUTTON;

	m_bLabelEditing = FALSE;
	m_fcnCallbackSelchangeFileFilter = NULL;
}

CFileWindow::~CFileWindow()
{
	m_imgToolbarDirectory.Detach();
	m_imgToolbarProject.Detach();

	m_imgWinButtons.Detach();
	m_imgCategoryTab.Detach();

	m_imgDirectoryTree.Detach();
	m_imgProjectTree.Detach();
}


BEGIN_MESSAGE_MAP(CFileWindow, CSizingControlBar)
	//{{AFX_MSG_MAP(CFileWindow)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_SIZE()
	ON_NOTIFY(TCN_SELCHANGE, IDC_FWIN_CATEGORY_TAB, OnSelchangeCategoryTab)
	ON_CBN_DROPDOWN(IDC_FWIN_LOCAL_DRIVE, OnDropdownLocalDrive)
	ON_CBN_SELCHANGE(IDC_FWIN_LOCAL_DRIVE, OnSelchangeLocalDrive)
	ON_CBN_SELCHANGE(IDC_FWIN_FILE_FILTER, OnSelchangeFileFilter)
	ON_NOTIFY(TVN_ITEMEXPANDED, IDC_FWIN_DIRECTORY_TREE, OnItemexpandedDirectoryTree)
	ON_NOTIFY(TVN_SELCHANGED, IDC_FWIN_DIRECTORY_TREE, OnSelchangedDirectoryTree)
	ON_NOTIFY(NM_CLICK, IDC_FWIN_DIRECTORY_TREE, OnClickDirectoryTree)
	ON_NOTIFY(NM_DBLCLK, IDC_FWIN_DIRECTORY_TREE, OnDblclkDirectoryTree)
	ON_NOTIFY(NM_RCLICK, IDC_FWIN_DIRECTORY_TREE, OnRclickDirectoryTree)
	ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_FWIN_DIRECTORY_TREE, OnBeginlabeleditDirectoryTree)
	ON_NOTIFY(TVN_ENDLABELEDIT, IDC_FWIN_DIRECTORY_TREE, OnEndlabeleditDirectoryTree)
	ON_NOTIFY(NM_CLICK, IDC_FWIN_PROJECT_TREE, OnClickProjectTree)
	ON_NOTIFY(NM_DBLCLK, IDC_FWIN_PROJECT_TREE, OnDblclkProjectTree)
	ON_NOTIFY(NM_RCLICK, IDC_FWIN_PROJECT_TREE, OnRclickProjectTree)
	ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_FWIN_PROJECT_TREE, OnBeginlabeleditProjectTree)
	ON_NOTIFY(TVN_ENDLABELEDIT, IDC_FWIN_PROJECT_TREE, OnEndlabeleditProjectTree)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CFileWindow message handlers

int CFileWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CSizingControlBar::OnCreate(lpCreateStruct) == -1) return -1;
	InitAllFileWindowControls();
	return 0;
}

void CFileWindow::OnDestroy() 
{
	CSizingControlBar::OnDestroy();

	// free memories allocated to each project item
	RemoveAllProjectItems();
}

void CFileWindow::OnSize(UINT nType, int cx, int cy) 
{
	ResizeAllFileWindowControls(cx, cy);
	CSizingControlBar::OnSize(nType, cx, cy);
}

void CFileWindow::OnSelchangeCategoryTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	INT nSelect = m_tabCategory.GetCurSel();
	ShowProperFileWindowControls( nSelect );
	*pResult = 0;
}

/////////////////////////////////////////////////////////////////////////////
// CFileWindow member functions

INT CFileWindow::GetActiveCategory()
{
	return m_tabCategory.GetCurSel();
}

void CFileWindow::SetActiveCategory(INT nSelect)
{
	m_tabCategory.SetCurSel( nSelect );
	ShowProperFileWindowControls(nSelect);
}

void CFileWindow::InitAllFileWindowControls()
{
	CRect rect(0, 0, 1, 1); DWORD dwStyle;

	// create controls
	dwStyle = WS_VISIBLE | WS_CHILD | CCS_NORESIZE | CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS;
	m_btnToolbarDirectory.Create(dwStyle, rect, this, IDC_FWIN_TOOLBAR_DIRECTORY);
	m_btnToolbarProject.Create(dwStyle, rect, this, IDC_FWIN_TOOLBAR_PROJECT);
	m_btnWinButtons.Create(dwStyle, rect, this, IDC_FWIN_TOOLBAR_BUTTONS);

	// directory
	dwStyle = WS_VISIBLE | WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST;
	m_cmbLocalDrive.Create(dwStyle, rect, this, IDC_FWIN_LOCAL_DRIVE);

	dwStyle = WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_EDITLABELS /* | TVS_LINESATROOT */ | TVS_HASBUTTONS | TVS_SHOWSELALWAYS;
	m_treDirectoryTree.Create(dwStyle, rect, this, IDC_FWIN_DIRECTORY_TREE);
	m_treDirectoryTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE, 0);

	dwStyle = WS_VISIBLE | WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST;
	m_cmbFileFilter.Create(dwStyle, rect, this, IDC_FWIN_FILE_FILTER);

	// remote
	dwStyle = WS_VISIBLE | WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST;
	m_cmbFtpAccount.Create(dwStyle, rect, this, IDC_FWIN_FTP_ACCOUNT);

	dwStyle = WS_VISIBLE | WS_CHILD | TVS_HASLINES /* | TVS_EDITLABELS | TVS_LINESATROOT */ | TVS_HASBUTTONS | TVS_SHOWSELALWAYS;
	m_treRemoteTree.Create(dwStyle, rect, this, IDC_FWIN_REMOTE_TREE);
	m_treRemoteTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE, 0);

	// project
	dwStyle = WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_EDITLABELS /* | TVS_LINESATROOT */ | TVS_HASBUTTONS | TVS_SHOWSELALWAYS;
	m_treProjectTree.Create(dwStyle, rect, this, IDC_FWIN_PROJECT_TREE);
	m_treProjectTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE, 0);

	// category
	dwStyle = WS_VISIBLE | WS_CHILD | TCS_FOCUSNEVER | TCS_BOTTOM;
	m_tabCategory.Create(dwStyle, rect, this, IDC_FWIN_CATEGORY_TAB);
//	m_tabCategory.ModifyStyleEx(0, WS_EX_STATICEDGE, 0);

	// set image list
	m_imgToolbarDirectory.Create(IDB_FWIN_TOOLBAR_DIRECTORY, 16, 0, RGB(255, 0, 255));
	m_btnToolbarDirectory.SetImageList( & m_imgToolbarDirectory );

	m_imgToolbarProject.Create(IDB_FWIN_TOOLBAR_PROJECT, 16, 0, RGB(255, 0, 255));
	m_btnToolbarProject.SetImageList( & m_imgToolbarProject );

	m_imgWinButtons.Create(IDB_WIN_BUTTONS, 12, 0, RGB(255, 0, 255));
	m_btnWinButtons.SetImageList( & m_imgWinButtons );

	m_imgCategoryTab.Create(IDB_FWIN_CATEGORY_TAB, 16, 0, RGB(255, 0, 255));
	m_tabCategory.SetImageList( & m_imgCategoryTab );

	InitDirectoryImageList( m_imgDirectoryTree );
	m_treDirectoryTree.SetImageList( & m_imgDirectoryTree, TVSIL_NORMAL );

	m_imgProjectTree.Create(IDB_PROJECT_ITEM, 16, 0, RGB(255, 0, 255));
	m_treProjectTree.SetImageList( & m_imgProjectTree, TVSIL_NORMAL );

	// set control fonts
	CFont * pFont = CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
	LOGFONT lf; pFont->GetLogFont( & lf ); m_fontControl.CreateFontIndirect( & lf );

	m_cmbLocalDrive.SetFont( & m_fontControl, FALSE );	m_treDirectoryTree.SetFont( & m_fontControl, FALSE );
	m_cmbFileFilter.SetFont( & m_fontControl, FALSE );	m_tabCategory.SetFont( & m_fontControl, FALSE );

	m_cmbFtpAccount.SetFont( & m_fontControl, FALSE );	m_treRemoteTree.SetFont( & m_fontControl, FALSE );
	m_treProjectTree.SetFont( & m_fontControl, FALSE );

	// initialize toolbar
	m_btnToolbarDirectory.AddButtons( 6, m_tbiToolbarDirectory );
	m_btnToolbarProject.AddButtons( 8, m_tbiToolbarProject );
	m_btnWinButtons.AddButtons( 2, m_tbiWinButtons );

	// initialize tab control
	CString szCategoryName( (LPCTSTR)IDS_FILE_WINDOW_DIRECTORY ); 
	m_tabCategory.InsertItem( FILE_WINDOW_DIRECTORY, szCategoryName, 0 );
//	szCategoryName.LoadString( IDS_FILE_WINDOW_REMOTE );
//	m_tabCategory.InsertItem( FILE_WINDOW_REMOTE, szCategoryName, 1 );
	szCategoryName.LoadString( IDS_FILE_WINDOW_PROJECT );
	m_tabCategory.InsertItem( FILE_WINDOW_PROJECT, szCategoryName, 2 );

	m_tabCategory.SetCurSel( FILE_WINDOW_DIRECTORY );
	ShowProperFileWindowControls( FILE_WINDOW_DIRECTORY );
}

void CFileWindow::ResizeAllFileWindowControls(INT cx, INT cy)
{
	INT nBegY = 0, nEndY = cy - 6;

	// button width = 22, seperator width = 8
	nBegY +=  2; m_btnToolbarDirectory.MoveWindow(2, nBegY, 106, 22);
	nBegY +=  0; m_btnToolbarProject.MoveWindow(2, nBegY, 136, 22);
	nBegY +=  2; m_btnWinButtons.MoveWindow(cx-38-2, nBegY, 38, 18);

	nBegY += 20; m_cmbLocalDrive.MoveWindow(2, nBegY, cx-4, 150);
	nBegY +=  0; m_cmbFtpAccount.MoveWindow(2, nBegY, cx-4, 150);

	nEndY -=  2; m_tabCategory.MoveWindow(2, nEndY-27, cx-4, 27);
	nEndY -= 29; m_cmbFileFilter.MoveWindow(2, nEndY-20, cx-4, 150);

	nBegY += 22; nEndY -= 22; m_treDirectoryTree.MoveWindow(2, nBegY, cx-4, nEndY-nBegY);
	nBegY +=  0; nEndY -=  0; m_treRemoteTree.MoveWindow(2, nBegY, cx-4, nEndY-nBegY);
	nBegY -= 22; nEndY += 22; m_treProjectTree.MoveWindow(2, nBegY, cx-4, nEndY-nBegY);
}

void CFileWindow::ShowProperFileWindowControls(INT nSelect)
{
	ShowOrHideDirectoryControls(nSelect);
	ShowOrHideRemoteControls(nSelect);
	ShowOrHideProjectControls(nSelect);
	ShowOrHideCommonControls(nSelect);
}

void CFileWindow::ShowOrHideCommonControls(INT nSelect)
{
	BOOL bEnable = (nSelect == FILE_WINDOW_DIRECTORY) ? TRUE : FALSE;
	m_btnWinButtons.EnableButton( ID_FILE_WINDOW_SYNC, bEnable );

	INT nCmdShow = ( (nSelect == FILE_WINDOW_DIRECTORY) || (nSelect == FILE_WINDOW_REMOTE) ) ? SW_SHOW : SW_HIDE;
	m_cmbFileFilter.ShowWindow( nCmdShow );
}

void CFileWindow::ShowOrHideDirectoryControls(INT nSelect)
{
	INT nCmdShow = (nSelect == FILE_WINDOW_DIRECTORY) ? SW_SHOW : SW_HIDE;

	m_btnToolbarDirectory.ShowWindow( nCmdShow );
	m_cmbLocalDrive.ShowWindow( nCmdShow );
	m_treDirectoryTree.ShowWindow( nCmdShow );
}

void CFileWindow::ShowOrHideRemoteControls(INT nSelect)
{
	INT nCmdShow = (nSelect == FILE_WINDOW_REMOTE) ? SW_SHOW : SW_HIDE;

	m_cmbFtpAccount.ShowWindow( nCmdShow );
	m_treRemoteTree.ShowWindow( nCmdShow );
}

void CFileWindow::ShowOrHideProjectControls(INT nSelect)
{
	INT nCmdShow = (nSelect == FILE_WINDOW_PROJECT) ? SW_SHOW : SW_HIDE;

	m_btnToolbarProject.ShowWindow( nCmdShow );
	m_treProjectTree.ShowWindow( nCmdShow );
}

BOOL CFileWindow::InitDirectoryImageList( CImageList & imglst )
{
	SHFILEINFO shFinfo; HIMAGELIST hImageList = NULL;
	hImageList = (HIMAGELIST)SHGetFileInfo( "C:\\", 0, &shFinfo, sizeof( shFinfo ), SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
	if ( ! hImageList ) return FALSE;

	if( imglst.Detach() ) AfxMessageBox( "This should not occur!");
	imglst.Attach( hImageList );

	return TRUE;
}

BOOL CFileWindow::PreTranslateMessage(MSG* pMsg) 
{
	INT nCategory = GetActiveCategory();

	switch( pMsg->message ) {
	case WM_KEYDOWN:
		switch( pMsg->wParam ) {
		case VK_RETURN:
			if( nCategory == FILE_WINDOW_DIRECTORY && ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_DIRECTORY_ITEM_OPEN, 0L );
			else if( nCategory == FILE_WINDOW_PROJECT && ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_PROJECT_ITEM_OPEN, 0L );
			break;
		case VK_DELETE:
			if( nCategory == FILE_WINDOW_DIRECTORY &&  ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_DIRECTORY_ITEM_DELETE, 0L );
			else if( nCategory == FILE_WINDOW_PROJECT && ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_PROJECT_ITEM_REMOVE, 0L );
			break;
		case VK_F2:
			if( nCategory == FILE_WINDOW_DIRECTORY &&  ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_DIRECTORY_ITEM_RENAME, 0L );
			else if( nCategory == FILE_WINDOW_PROJECT &&  ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_PROJECT_ITEM_RENAME, 0L );
			break;
		case VK_F5:
			if( nCategory == FILE_WINDOW_DIRECTORY &&  ! m_bLabelEditing ) PostMessage( WM_COMMAND, ID_DIRECTORY_ITEM_REFRESH, 0L );
			break;
		}
		break;
	}

	if( pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP ) {
		TranslateMessage( pMsg );
		DispatchMessage( pMsg );
		return TRUE;
	} else return CSizingControlBar::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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