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