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