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

📄 mainfrm.cpp

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

	return TRUE;
}

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

	INT nMenuCount = pParentMenu->GetMenuItemCount();
	for( INT i = nMenuCount-1; i >= 1; i-- ) pParentMenu->DeleteMenu(i, MF_BYPOSITION);

	for( INT j = 0; j < 8; j++ ) {
		CString szMenuText = GetFileTitle(CCedtView::m_szUserCommandFilePath[j]);
		if( j == 0 ) {
			if( ! szMenuText.GetLength() ) szMenuText.LoadString(IDS_MENU_NO_FILE_AVAILABLE);
			pParentMenu->ModifyMenu(j, MF_BYPOSITION, ID_COMMAND_USER_FILE0, szMenuText);
		} else { 
			if( ! szMenuText.GetLength() ) continue;
			pParentMenu->InsertMenu(j, MF_BYPOSITION, ID_COMMAND_USER_FILE0 + j, szMenuText);
		}
	}

	return TRUE;
}

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

	INT nMenuCount = pParentMenu->GetMenuItemCount();
	for( INT i = nMenuCount-1; i >= 1; i-- ) pParentMenu->DeleteMenu(i, MF_BYPOSITION);

	for( INT j = 0; j < 8; j++ ) {
		CString szMenuText = GetFileTitle(CCedtView::m_szMacroBufferFilePath[j]);
		if( j == 0 ) {
			if( ! szMenuText.GetLength() ) szMenuText.LoadString(IDS_MENU_NO_FILE_AVAILABLE);
			pParentMenu->ModifyMenu(j, MF_BYPOSITION, ID_MACRO_USER_FILE0, szMenuText);
		} else {
			if( ! szMenuText.GetLength() ) continue;
			pParentMenu->InsertMenu(j, MF_BYPOSITION, ID_MACRO_USER_FILE0 + j, szMenuText);
		}
	}

	return TRUE;
}

CMenu * CMainFrame::FindParentMenuContaing(CMenu * pParentMenu, UINT nFindMenuID)
{
	INT nMenuCount = pParentMenu->GetMenuItemCount();
	for(INT i = 0; i < nMenuCount; i++) {
		UINT nMenuID = pParentMenu->GetMenuItemID(i);
		if( nMenuID == nFindMenuID ) return pParentMenu;

		if( (INT)nMenuID == -1 ) { // pop-up menu
			CMenu * pMenu = FindParentMenuContaing( pParentMenu->GetSubMenu(i), nFindMenuID );
			if( pMenu ) return pMenu;
		}
	}

	return NULL;
}

// window placement
BOOL CMainFrame::SaveWindowPlacement(LPCTSTR lpszProfileName)
{
	CCedtApp * pApp = (CCedtApp *)AfxGetApp();

	WINDOWPLACEMENT wndpl; wndpl.length = sizeof(wndpl);
	GetWindowPlacement( & wndpl );
	pApp->WriteProfileInt(lpszProfileName, "flags", (INT)wndpl.flags);
	pApp->WriteProfileInt(lpszProfileName, "showCmd", (INT)wndpl.showCmd);
	pApp->WriteProfileInt(lpszProfileName, "minX", wndpl.ptMinPosition.x);
	pApp->WriteProfileInt(lpszProfileName, "minY", wndpl.ptMinPosition.y);
	pApp->WriteProfileInt(lpszProfileName, "maxX", wndpl.ptMaxPosition.x);
	pApp->WriteProfileInt(lpszProfileName, "maxY", wndpl.ptMaxPosition.y);
	pApp->WriteProfileInt(lpszProfileName, "left", wndpl.rcNormalPosition.left);
	pApp->WriteProfileInt(lpszProfileName, "top", wndpl.rcNormalPosition.top);
	pApp->WriteProfileInt(lpszProfileName, "right", wndpl.rcNormalPosition.right);
	pApp->WriteProfileInt(lpszProfileName, "bottom", wndpl.rcNormalPosition.bottom);

	SIZE szHorz, szVert, szFloat;
	szHorz = m_wndFileWindow.GetHorzSize();
	pApp->WriteProfileInt(lpszProfileName, "auxhcx", szHorz.cx);
	pApp->WriteProfileInt(lpszProfileName, "auxhcy", szHorz.cy);
	szVert = m_wndFileWindow.GetVertSize();
	pApp->WriteProfileInt(lpszProfileName, "auxvcx", szVert.cx);
	pApp->WriteProfileInt(lpszProfileName, "auxvcy", szVert.cy);
	szFloat = m_wndFileWindow.GetFloatSize();
	pApp->WriteProfileInt(lpszProfileName, "auxfcx", szFloat.cx);
	pApp->WriteProfileInt(lpszProfileName, "auxfcy", szFloat.cy);

	szHorz = m_wndOutputWindow.GetHorzSize();
	pApp->WriteProfileInt(lpszProfileName, "outhcx", szHorz.cx);
	pApp->WriteProfileInt(lpszProfileName, "outhcy", szHorz.cy);
	szVert = m_wndOutputWindow.GetVertSize();
	pApp->WriteProfileInt(lpszProfileName, "outvcx", szVert.cx);
	pApp->WriteProfileInt(lpszProfileName, "outvcy", szVert.cy);
	szFloat = m_wndOutputWindow.GetFloatSize();
	pApp->WriteProfileInt(lpszProfileName, "outfcx", szFloat.cx);
	pApp->WriteProfileInt(lpszProfileName, "outfcy", szFloat.cy);

	pApp->WriteProfileInt(lpszProfileName, "saved", 1);

	return TRUE;
}

BOOL CMainFrame::LoadWindowPlacement(LPCTSTR lpszProfileName)
{
	CCedtApp * pApp = (CCedtApp *)AfxGetApp();

	if( ! pApp->GetProfileInt(lpszProfileName, "saved", 0) ) return FALSE;

	SIZE szHorz, szVert, szFloat;
	szHorz.cx = pApp->GetProfileInt(lpszProfileName, "auxhcx", 200);
	szHorz.cy = pApp->GetProfileInt(lpszProfileName, "auxhcy", 480);
	m_wndFileWindow.SetHorzSize(szHorz);
	szVert.cx = pApp->GetProfileInt(lpszProfileName, "auxvcx", 200);
	szVert.cy = pApp->GetProfileInt(lpszProfileName, "auxvcy", 480);
	m_wndFileWindow.SetVertSize(szVert);
	szFloat.cx = pApp->GetProfileInt(lpszProfileName, "auxfcx", 200);
	szFloat.cy = pApp->GetProfileInt(lpszProfileName, "auxfcy", 480);
	m_wndFileWindow.SetFloatSize(szFloat);

	szHorz.cx = pApp->GetProfileInt(lpszProfileName, "outhcx", 640);
	szHorz.cy = pApp->GetProfileInt(lpszProfileName, "outhcy",  80);
	m_wndOutputWindow.SetHorzSize(szHorz);
	szVert.cx = pApp->GetProfileInt(lpszProfileName, "outvcx", 640);
	szVert.cy = pApp->GetProfileInt(lpszProfileName, "outvcy",  80);
	m_wndOutputWindow.SetVertSize(szVert);
	szFloat.cx = pApp->GetProfileInt(lpszProfileName, "outfcx", 640);
	szFloat.cy = pApp->GetProfileInt(lpszProfileName, "outfcy",  80);
	m_wndOutputWindow.SetFloatSize(szFloat);

	WINDOWPLACEMENT wndpl; wndpl.length = sizeof(wndpl);
	wndpl.flags = pApp->GetProfileInt(lpszProfileName, "flags", 0);
	wndpl.showCmd = pApp->GetProfileInt(lpszProfileName, "showCmd", 0);
	wndpl.ptMinPosition.x = pApp->GetProfileInt(lpszProfileName, "minX", 0);
	wndpl.ptMinPosition.y = pApp->GetProfileInt(lpszProfileName, "minY", 0);
	wndpl.ptMaxPosition.x = pApp->GetProfileInt(lpszProfileName, "maxX", 0);
	wndpl.ptMaxPosition.y = pApp->GetProfileInt(lpszProfileName, "maxY", 0);
	wndpl.rcNormalPosition.left = pApp->GetProfileInt(lpszProfileName, "left", 0);
	wndpl.rcNormalPosition.top = pApp->GetProfileInt(lpszProfileName, "top", 0);
	wndpl.rcNormalPosition.right = pApp->GetProfileInt(lpszProfileName, "right", 0);
	wndpl.rcNormalPosition.bottom = pApp->GetProfileInt(lpszProfileName, "bottom", 0);
	SetWindowPlacement( & wndpl );

	return TRUE;
}


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

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

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

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnSetPreviewMode(BOOL bPreview, CPrintPreviewState* pState) 
{
	CMDIFrameWnd::OnSetPreviewMode(bPreview, pState);
	m_bPrintPreviewMode = bPreview;

	if( bPreview ) {
		m_wndStatusBar.SetIndicators(indicators1, sizeof(indicators1)/sizeof(UINT));
	} else {
		m_wndStatusBar.SetIndicators(indicators0, sizeof(indicators0)/sizeof(UINT));

		CRect rect; GetWindowRect( & rect );
		PostMessage(WM_SIZE_MAIN_WINDOW, 0, MAKELONG(rect.Width(), rect.Height()));
	}
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CMDIFrameWnd::OnSize(nType, cx, cy);

	// only call when it is not in print preview mode to avoid program crash
	if( ! m_bPrintPreviewMode ) CCedtView::OnSizeMainWindow(cx, cy);
}

void CMainFrame::OnSizeMainWindow(int cx, int cy)
{
	// when print preview is closed direct call to CCedtView::OnSizeMainWindow()
	// causes program to crash...
	if( ! m_bPrintPreviewMode ) CCedtView::OnSizeMainWindow(cx, cy);

	// we need to update all the views again...
	CCedtApp * pApp = (CCedtApp *)AfxGetApp(); ASSERT( pApp );
	pApp->UpdateAllViews();
}

void CMainFrame::OnClose() 
{
	// user can *CANCEL* termination of mainframe window if there is any 
	// unsaved document and select *CANCEL* from dialog box
	// so, don't call any termination procedure in this function.
	if( ! m_bPrintPreviewMode ) {
		// Save window placement & bar state
		SaveBarState(REGKEY_BAR_STATE);
		SaveWindowPlacement(REGKEY_WINDOW_PLACEMENT);

		CCedtApp::SaveUserConfiguration();

		CCedtApp * pApp = (CCedtApp *)AfxGetApp(); // get application pointer
		pApp->SaveBrowsingDirectory(REGKEY_BROWSING_DIR);

		// current working directory might differ from browsing directory
		pApp->SaveWorkingDirectory(REGKEY_WORKING_DIR);

		if( CCedtApp::m_bFirstInstance ) {
			// save workspace file path
			pApp->SaveWorkspaceFilePath(REGKEY_LAST_WORKSPACE);

			// save working file list and user configuration
			if( pApp->IsProjectLoaded() ) pApp->SaveProjectWorkspace();
			else pApp->SaveRegularWorkspace();
		}
	}

	CMDIFrameWnd::OnClose();
}

void CMainFrame::OnActivateApp(BOOL bActive, HTASK hTask) 
{
	CMDIFrameWnd::OnActivateApp(bActive, hTask);
	if( bActive ) {
		CCedtApp * pApp = (CCedtApp *)AfxGetApp();
		pApp->CheckIfFilesModifiedOutside();
	}
}

void CMainFrame::RecalcLayout(BOOL bNotify) 
{
	CMDIFrameWnd::RecalcLayout(bNotify);
	CMDIFrameWnd::RecalcLayout(bNotify);
}

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
	static INT nCount;

	switch( pMsg->message ) {
	case WM_KEYDOWN:
		switch( pMsg->wParam ) {
		case VK_CONTROL:
			m_bSwitchingChildFrame = TRUE;
			nCount = 0;
			break;

		case VK_TAB:
			if( GetKeyState(VK_CONTROL) & 0xF0 ) {
				ActivateChildFrameInZOrder(++nCount);
				return TRUE;
			}
			break;

		case VK_NEXT:
			if( GetKeyState(VK_CONTROL) & 0xF0 ) {
				ActivateNextChildFrame();
				return TRUE;
			}
			break;

		case VK_PRIOR:
			if( GetKeyState(VK_CONTROL) & 0xF0 ) {
				ActivatePrevChildFrame();
				return TRUE;
			}
			break;

		case VK_F5:
			if( GetKeyState(VK_CONTROL) & 0xF0 ) {
				if( GetKeyState(VK_SHIFT) & 0xF0 ) {
					ActivateNextChildFrame();
					return TRUE;
				} else {
					ActivatePrevChildFrame();
					return TRUE;
				} 
			} 
			break;

		case VK_F6:
			if( GetKeyState(VK_CONTROL) & 0xF0 ) {
				if( GetKeyState(VK_SHIFT) & 0xF0 ) {
					ActivatePrevChildFrame();
					return TRUE;
				} else {
					ActivateNextChildFrame();
					return TRUE;
				} 
			} 
			break;
		}
		break;

	case WM_KEYUP:
		switch( pMsg->wParam ) {
		case VK_CONTROL:
			m_bSwitchingChildFrame = FALSE;
			BringChildFrameToTop(NULL);
			break;
		}
		break;

	case WM_SIZE_MAIN_WINDOW:
		OnSizeMainWindow(LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
		return TRUE;
	}
	
	return CMDIFrameWnd::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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