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

📄 mainfrm.cpp

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

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

#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(ID_VIEW_FILE_TAB, OnViewFileTab)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FILE_TAB, OnUpdateViewFileTab)
	ON_WM_ACTIVATEAPP()
	ON_WM_CLOSE()
	ON_COMMAND(ID_VIEW_DIRECTORY, OnViewDirectory)
	ON_UPDATE_COMMAND_UI(ID_VIEW_DIRECTORY, OnUpdateViewDirectory)
	ON_COMMAND(ID_VIEW_OUTPUT, OnViewOutput)
	ON_UPDATE_COMMAND_UI(ID_VIEW_OUTPUT, OnUpdateViewOutput)
	ON_COMMAND(ID_VIEW_PROJECT, OnViewProject)
	ON_UPDATE_COMMAND_UI(ID_VIEW_PROJECT, OnUpdateViewProject)
	ON_COMMAND(ID_WINDOW_LAST_VISITED, OnWindowLastVisited)
	ON_COMMAND(ID_WINDOW_NEXT, OnWindowNext)
	ON_COMMAND(ID_WINDOW_PREV, OnWindowPrev)
	ON_WM_SIZE()
	ON_COMMAND(ID_FILE_WINDOW_HIDE, OnFileWindowHide)
	ON_COMMAND(ID_FILE_WINDOW_SYNC, OnFileWindowSync)
	ON_COMMAND(ID_OUTPUT_WINDOW_HIDE, OnOutputWindowHide)
	ON_COMMAND(ID_OUTPUT_WINDOW_COPY, OnOutputWindowCopy)
	ON_COMMAND(ID_OUTPUT_WINDOW_CLEAR, OnOutputWindowClear)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators0[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_POS,
	ID_INDICATOR_MAX,
	ID_INDICATOR_FORMAT,
	ID_INDICATOR_READONLY,
	ID_INDICATOR_REC,
	ID_INDICATOR_COL,
	ID_INDICATOR_OVR,
};

static UINT indicators1[] =
{
	ID_SEPARATOR,           // status line indicator
};

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

CMainFrame::CMainFrame()
{
	m_bSwitchingChildFrame = FALSE;
	m_bPrintPreviewMode = FALSE;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	CString szText;

	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if ( ! m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		 | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		 ! m_wndToolBar.LoadToolBar(IDR_MAINFRAME) ) {
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if ( ! m_wndStatusBar.Create(this) ||
		 ! m_wndStatusBar.SetIndicators(indicators0, sizeof(indicators0)/sizeof(UINT)) ) {
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
	szText.LoadString(IDS_TOOL_TOOLBAR);
	m_wndToolBar.SetWindowText(szText);

	// File Selector
	if ( ! m_wndFileTab.Create(this) ) {
		TRACE0("Failed to create file tab\n");
		return -1;
	}

	m_wndFileTab.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
	DockControlBar(&m_wndFileTab, AFX_IDW_DOCKBAR_TOP);
	szText.LoadString(IDS_TOOL_FILE_TAB);
	m_wndFileTab.SetWindowText(szText);

	// File Window
	if ( ! m_wndFileWindow.Create(this, CSize(200, 480), ID_FILE_WINDOW, WS_CHILD | CBRS_LEFT) ) {
		TRACE0("Failed to create file window\n");
		return -1;
	}

	m_wndFileWindow.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
	DockControlBar( & m_wndFileWindow, AFX_IDW_DOCKBAR_LEFT );
	szText.LoadString(IDS_TOOL_FILE_WINDOW);
	m_wndFileWindow.SetWindowText(szText);

	// Output Window
	if ( ! m_wndOutputWindow.Create(this, CSize(640, 100), ID_OUTPUT_WINDOW, WS_CHILD | CBRS_BOTTOM) ) {
		TRACE0("Failed to create output window\n");
		return -1;
	}

	m_wndOutputWindow.EnableDocking(CBRS_ALIGN_BOTTOM | CBRS_ALIGN_TOP);
	DockControlBar( & m_wndOutputWindow, AFX_IDW_DOCKBAR_BOTTOM );
	szText.LoadString(IDS_TOOL_OUTPUT_WINDOW);
	m_wndOutputWindow.SetWindowText(szText);

	// Status Bar
	m_wndStatusBar.SetPaneStyle(1, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(2, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(3, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(4, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(5, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(6, SBPS_DISABLED); // OWNER DRAW PANE
	m_wndStatusBar.SetPaneStyle(7, SBPS_DISABLED); // OWNER DRAW PANE

	m_wndStatusBar.SetPaneTextColor(1, RGB(  0,   0, 128)); // POS
	m_wndStatusBar.SetPaneTextColor(2, RGB(  0,   0, 128)); // MAX
	m_wndStatusBar.SetPaneTextColor(3, RGB(  0,   0, 128)); // FORMAT
	m_wndStatusBar.SetPaneTextColor(4, RGB(128, 128, 128)); // READONLY
	m_wndStatusBar.SetPaneTextColor(5, RGB(160,  64,  64)); // REC
	m_wndStatusBar.SetPaneTextColor(6, RGB( 64, 160,  64)); // COL
	m_wndStatusBar.SetPaneTextColor(7, RGB( 64,  64, 160)); // OVR

	SetCaretPositionInfo(0, 0, 0);

	return 0;
}

// status bar
void CMainFrame::SetCaretPositionInfo(INT nLine, INT nCol, INT nMax)
{
	if( m_bPrintPreviewMode ) return;

	CString szPaneText; szPaneText.Format("Ln %d,  Ch %d", nLine, nCol);
	m_wndStatusBar.SetPaneText(1, szPaneText);

	szPaneText.Format("%d", nMax);
	m_wndStatusBar.SetPaneText(2, szPaneText);
}

void CMainFrame::SetFileStatusInfo(INT nEncodingType, INT nFileFormat, BOOL bReadOnly)
{
	if( m_bPrintPreviewMode ) return;

	CString szPaneText = ENCODING_TYPE_DESCRIPTION_SHORT[nEncodingType];
	szPaneText += ", ";
	szPaneText += FILE_FORMAT_DESCRIPTION_SHORT[nFileFormat];

	m_wndStatusBar.SetPaneText(3, szPaneText);
	m_wndStatusBar.SetPaneHighlight(4, bReadOnly);
}

void CMainFrame::SetMacroRecordingFlag(BOOL bRecording)
{
	if( m_bPrintPreviewMode ) return;
	m_wndStatusBar.SetPaneHighlight(5, bRecording);
}

void CMainFrame::SetColumnModeFlag(BOOL bColumnMode)
{
	if( m_bPrintPreviewMode ) return;
	m_wndStatusBar.SetPaneHighlight(6, bColumnMode);
}

void CMainFrame::SetOverwriteFlag(BOOL bOverwrite)
{
	if( m_bPrintPreviewMode ) return;
	m_wndStatusBar.SetPaneHighlight(7, bOverwrite);
}


// file tab
void CMainFrame::InsertMDIFileTab(CMDIChildWnd * pChild)
{
	m_wndFileTab.InsertMDIFileTab(pChild);
	m_lstChildFrame.AddHead(pChild);
}

void CMainFrame::DeleteMDIFileTab(CMDIChildWnd * pChild)
{
	m_wndFileTab.DeleteMDIFileTab(pChild);
	POSITION pos = m_lstChildFrame.Find(pChild);
	if( pos ) m_lstChildFrame.RemoveAt(pos);
}

void CMainFrame::UpdateMDIFileTab(CMDIChildWnd * pChild)
{
	m_wndFileTab.UpdateMDIFileTab(pChild);
}

void CMainFrame::SetActiveFileTab(CMDIChildWnd * pChild)
{
	m_wndFileTab.SetActiveFileTab(pChild);
	if( ! m_bSwitchingChildFrame ) BringChildFrameToTop(pChild);
}


// file window
void CMainFrame::ShowFileWindowCategory(INT nCategory)
{
	INT nActivCat = m_wndFileWindow.GetActiveCategory();
	BOOL bVisible = m_wndFileWindow.IsWindowVisible();

	if( nActivCat == nCategory ) {
		if( ! bVisible ) ShowControlBar( & m_wndFileWindow, TRUE, FALSE );
	} else {
		if( ! bVisible ) ShowControlBar( & m_wndFileWindow, TRUE, FALSE );
		m_wndFileWindow.SetActiveCategory( nCategory );
	}
}

void CMainFrame::ToggleFileWindowCategory(INT nCategory)
{
	INT nActivCat = m_wndFileWindow.GetActiveCategory();
	BOOL bVisible = m_wndFileWindow.IsWindowVisible();

	if( nActivCat == nCategory ) {
		ShowControlBar( & m_wndFileWindow, ! bVisible, FALSE );
	} else {
		if( ! bVisible ) ShowControlBar( & m_wndFileWindow, TRUE, FALSE );
		m_wndFileWindow.SetActiveCategory( nCategory );
	}
}


// child window
CDocument * CMainFrame::MDIGetActiveDocument()
{
	CView * pView = MDIGetActiveView();
	return pView ? pView->GetDocument() : NULL;
}

CView * CMainFrame::MDIGetActiveView()
{
	CMDIChildWnd * pChild = (CMDIChildWnd *)GetActiveFrame();
	return pChild ? pChild->GetActiveView() : NULL;
}

void CMainFrame::ActivateNextChildFrame()
{
	CMDIChildWnd * pChild = m_wndFileTab.GetNextChildFrame();
	if( pChild ) pChild->MDIActivate();
}

void CMainFrame::ActivatePrevChildFrame()
{
	CMDIChildWnd * pChild = m_wndFileTab.GetPrevChildFrame();
	if( pChild ) pChild->MDIActivate();
}

void CMainFrame::ActivateChildFrameInZOrder(INT nIndex)
{
	INT nCount = m_lstChildFrame.GetCount();
	if( nCount == 0 ) return;

	nIndex = nIndex % nCount;
	if( nIndex < 0 || nIndex > nCount-1 ) return;

	POSITION pos = m_lstChildFrame.FindIndex(nIndex);
	if( ! pos ) return;

	CMDIChildWnd * pChild = m_lstChildFrame.GetAt(pos);
	if( pChild ) pChild->MDIActivate();
}

void CMainFrame::BringChildFrameToTop(CMDIChildWnd * pChild)
{
	if( pChild == NULL ) pChild = MDIGetActive();

	POSITION pos = m_lstChildFrame.Find(pChild);
	if( ! pos ) return;

	m_lstChildFrame.RemoveAt(pos);
	m_lstChildFrame.AddHead(pChild);
}


// others
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{
	if ((GetStyle() & FWS_ADDTOTITLE) == 0)
		return; // leave it alone!

	UpdateFrameTitleForDocument(NULL);
}

BOOL CMainFrame::RefreshSyntaxTypeMenu()
{
	CMenu * pMainMenu = GetMenu(); if( ! pMainMenu ) return FALSE;
	CMenu * pParentMenu = FindParentMenuContaing(pMainMenu, ID_DOCU_SYNTAX_AUTO); if( ! pParentMenu ) return FALSE;

	INT nInserted = 0, nMenuCount = pParentMenu->GetMenuItemCount();
	for( INT i = nMenuCount-3; i >= 3; i-- ) pParentMenu->DeleteMenu(i, MF_BYPOSITION);

	for( INT j = 0; j < MAX_SYNTAX_TYPE; j++ ) {
		CString & szMenuText = CCedtDoc::m_clsSyntaxTypes[j].m_szDescription;
		if( szMenuText.GetLength() ) {
			pParentMenu->InsertMenu(3 + nInserted, MF_BYPOSITION, ID_DOCU_SYNTAX_TYPE0 + j, szMenuText);
			nInserted++;
		}
	}

⌨️ 快捷键说明

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