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

📄 mainfrm.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  }

  CString strControlBarRegEntry = REGISTRY_ROOT;
  strControlBarRegEntry += CONTROL_BARS;

  CDockState dockState;
  dockState.LoadState (CONTROL_BARS);

	for (int i = 0; i < dockState.m_arrBarInfo.GetSize (); i ++)
	{
		CControlBarInfo* pInfo = (CControlBarInfo*) dockState.m_arrBarInfo [i];
		ASSERT (pInfo != NULL);

		if (!pInfo->m_bFloating)
		{
			if (GetControlBar (pInfo->m_nBarID) == NULL)
			{
				TRACE (_T("ControlBar %x is not valid!\n"), pInfo->m_nBarID);
				return 0;
			}
		}
	}
  SetDockState (dockState);

  return 0;
}

void CMainFrame2::OnClose()
{
  if (g_pProject && g_pProject->IsModified ())
    {
      CString sText;
      sText.Format (IDS_PROJECT_NOT_SAVED, GetName (g_pProject->sPath));
      int nResult = AfxMessageBox (sText, MB_YESNOCANCEL|MB_ICONQUESTION);
      if (nResult == IDYES)
        {
          if (!theApp.SaveProject ())
            return;
        }
      else if (nResult != IDNO)
        return;
    }
  theApp.SaveLastDocs ();
  if (m_bFullScreen)
    FullScreenOff ();
  WINDOWPLACEMENT status;
  status.length = sizeof (WINDOWPLACEMENT);
  GetWindowPlacement (&status);

  CReg reg;
  if (reg.Create (HKEY_CURRENT_USER, REG_EDITPAD_IDE, KEY_WRITE))
    {
      VERIFY (reg.SaveNumber (_T ("ShowFlags"), status.flags));
      VERIFY (reg.SaveNumber (_T ("ShowCmd"), status.showCmd));

      VERIFY (reg.SaveNumber (_T ("Left"), status.rcNormalPosition.left));
      VERIFY (reg.SaveNumber (_T ("Top"), status.rcNormalPosition.top));
      VERIFY (reg.SaveNumber (_T ("Right"), status.rcNormalPosition.right));
      VERIFY (reg.SaveNumber (_T ("Bottom"), status.rcNormalPosition.bottom));
    }

  CString strControlBarRegEntry = REGISTRY_ROOT;
  strControlBarRegEntry += CONTROL_BARS;

  CDockState dockState;
  GetDockState (dockState);
  dockState.SaveState (CONTROL_BARS);

  CMDIFrameWnd::OnClose();
}

void CMainFrame2::OnViewFullScreen()
{
	if (m_bFullScreen)
		FullScreenOff ();
	else
    FullScreenOn ();
}

void CMainFrame2::OnUpdateViewFullScreen(CCmdUI* pCmdUI)
{
	pCmdUI->SetCheck (m_bFullScreen);	
}

void CMainFrame2::OnFileCloseAll()
{
  if (theApp.SaveAllModified ())
    theApp.CloseAllDocuments (FALSE);
}

void CMainFrame2::OnCloseWindow()
{
  MDIGetActive ()->DestroyWindow ();
}

void CMainFrame2::OnUpdateCloseWindow(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (MDIGetActive () != NULL);
}

void CMainFrame2::OnNextWindow()
{
  MDINext ();
}

void CMainFrame2::OnUpdateNextWindow(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (MDIGetCount () > 1);
}

void CMainFrame2::OnPrevWindow()
{
  MDIPrev ();
}

void CMainFrame2::OnUpdatePrevWindow(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (MDIGetCount () > 1);
}

void CMainFrame2::OnExplorer()
{
  m_wndWorkspaceBar.ToggleExplorer ();
}

void CMainFrame2::OnUpdateExplorer(CCmdUI* pCmdUI)
{
  if (m_wndWorkspaceBar.IsVisible ())
    {
      pCmdUI->Enable (TRUE);
      pCmdUI->SetCheck (m_wndWorkspaceBar.IsExplorer ());
    }
  else
    pCmdUI->Enable (FALSE);
}

void CMainFrame2::OnProject()
{
  m_wndWorkspaceBar.ToggleProject ();
}

void CMainFrame2::OnUpdateProject(CCmdUI* pCmdUI)
{
  if (m_wndWorkspaceBar.IsVisible ())
    {
      pCmdUI->Enable (TRUE);
      pCmdUI->SetCheck (m_wndWorkspaceBar.IsProject ());
    }
  else
    pCmdUI->Enable (FALSE);
}

//Alarm flashing until the window became focus
void CMainFrame2::FlashUntilFocus ()
  {
	  m_bGotFocus = FALSE;

	  BOOL bInvert = FALSE;
	  while (!m_bGotFocus)
	    {		
		    FlashWindow (bInvert);
		    bInvert= !bInvert;
		    Sleep (500);
		    if (GetFocus() == this)
			    break;
	    }		
	  FlashWindow(FALSE);
  }

void CMainFrame2::OnSetFocus (CWnd* pOldWnd)
{
	CMDIFrameWnd::OnSetFocus (pOldWnd);	
	m_bGotFocus = TRUE;	
}

LONG CMainFrame2::
OnOpenHere (WPARAM wParam, LPARAM lParam)
{
  if (FileExist((LPCTSTR) lParam))
    {
      theApp.OpenDocumentFile ((LPCTSTR) lParam);
    }
  return 0;
}

void CMainFrame2::OnProjectNew()
{
  if (theApp.NewProject ())
    m_wndWorkspaceBar.PopulateProject ();
}

void CMainFrame2::OnUpdateProjectNew(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (TRUE);
}

void CMainFrame2::OnProjectOpen()
{
  if (g_pProject && g_pProject->IsModified ())
    {
      CString sText;
      sText.Format (IDS_PROJECT_NOT_SAVED, GetName (g_pProject->sPath));
      int nResult = AfxMessageBox (sText, MB_YESNOCANCEL|MB_ICONQUESTION);
      if (nResult == IDYES)
        {
          if (!theApp.SaveProject ())
            return;
        }
      else if (nResult != IDNO)
        return;
    }
  if (theApp.OpenProject ())
    m_wndWorkspaceBar.PopulateProject ();
}

void CMainFrame2::OnUpdateProjectOpen(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (TRUE);
}

void CMainFrame2::OnProjectReload()
{
  if (g_pProject && g_pProject->IsModified ())
    {
      CString sText;
      sText.Format (IDS_PROJECT_NOT_SAVED, GetName (g_pProject->sPath));
      int nResult = AfxMessageBox (sText, MB_YESNOCANCEL|MB_ICONQUESTION);
      if (nResult == IDYES)
        {
          if (!theApp.SaveProject ())
            return;
        }
      else if (nResult != IDNO)
        return;
    }
  if (g_pProject)
    {
      if (theApp.OpenProject (g_pProject->sPath))
        m_wndWorkspaceBar.PopulateProject ();
    }
}

void CMainFrame2::OnUpdateProjectReload(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (g_pProject != NULL);
}

void CMainFrame2::OnProjectClose()
{
  if (g_pProject && g_pProject->IsModified ())
    {
      CString sText;
      sText.Format (IDS_PROJECT_NOT_SAVED, GetName (g_pProject->sPath));
      int nResult = AfxMessageBox (sText, MB_YESNOCANCEL|MB_ICONQUESTION);
      if (nResult == IDYES)
        {
          if (!theApp.SaveProject ())
            return;
        }
      else if (nResult != IDNO)
        return;
    }
  if (g_pProject)
    {
      m_wndWorkspaceBar.EmptyProject ();
      delete g_pProject;
      g_pProject = NULL;
    }
}

void CMainFrame2::OnUpdateProjectClose(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (g_pProject != NULL);
}

void CMainFrame2::OnProjectSave()
{
  if (g_pProject)
    theApp.SaveProject ();
}

void CMainFrame2::OnUpdateProjectSave(CCmdUI* pCmdUI)
{
  if (g_pProject)
    {
      CString sExt = GetExt (g_pProject->sPath);
      sExt.MakeLower ();
      pCmdUI->Enable (g_pProject->sPath.IsEmpty () || sExt == _T ("edp"));
    }
  else
    pCmdUI->Enable (FALSE);
}

void CMainFrame2::OnProjectSaveAs()
{
  if (g_pProject)
    theApp.SaveProjectAs ();
}

void CMainFrame2::OnUpdateProjectSaveAs(CCmdUI* pCmdUI)
{
  pCmdUI->Enable (g_pProject != NULL);
}

void CMainFrame2::OnMruProject(UINT nID)
{
  ASSERT_VALID (this);
  ASSERT (!theApp.m_lstProjects.IsEmpty ());
  ASSERT (nID >= ID_PROJECT_MRU_FILE1);
  ASSERT (nID < (UINT) (ID_PROJECT_MRU_FILE1 + theApp.m_lstProjects.GetCount ()));
  int nIndex = nID - ID_PROJECT_MRU_FILE1;
  POSITION pos = theApp.m_lstProjects.FindIndex (nIndex);
  ASSERT (pos);
  CString sProject = theApp.m_lstProjects.GetAt (pos);

  TRACE2 ("MRU: open project (%d) '%s'.\n", nIndex + 1, sProject);

  if (g_pProject && g_pProject->IsModified ())
    {
      CString sText;
      sText.Format (IDS_PROJECT_NOT_SAVED, GetName (g_pProject->sPath));
      int nResult = AfxMessageBox (sText, MB_YESNOCANCEL|MB_ICONQUESTION);
      if (nResult == IDYES)
        {
          if (!theApp.SaveProject ())
            return;
        }
      else if (nResult != IDNO)
        return;
    }
  if (theApp.OpenProject (sProject))
    m_wndWorkspaceBar.PopulateProject ();
}

void CMainFrame2::OnUpdateMruProject(CCmdUI* pCmdUI)
{
  CString sOriginal;
  if (pCmdUI->m_pMenu != NULL)
    pCmdUI->m_pMenu->GetMenuString (pCmdUI->m_nID, sOriginal, MF_BYCOMMAND);

  if (theApp.m_lstProjects.IsEmpty ())
    {
      if (!sOriginal.IsEmpty ())
        pCmdUI->SetText (sOriginal);
      pCmdUI->Enable (FALSE);
      return;
    }

  if (pCmdUI->m_pMenu == NULL)
    return;

  for (int iMRU = 0; iMRU < 16; iMRU++)
    pCmdUI->m_pMenu->DeleteMenu (pCmdUI->m_nID + iMRU, MF_BYCOMMAND);

  CString sProject;
  TCHAR buf[5];
  POSITION pos = theApp.m_lstProjects.GetHeadPosition ();
  ASSERT (pos);
  iMRU = 0;
  do
    {
      sProject = theApp.m_lstProjects.GetNext (pos);
      _stprintf (buf, _T("&%d "), (iMRU++ + 1) % 10);
      pCmdUI->m_pMenu->InsertMenu (pCmdUI->m_nIndex++, MF_STRING|MF_BYPOSITION, pCmdUI->m_nID++, buf + sProject);
    }
  while (pos);

  pCmdUI->m_nIndex--;
  pCmdUI->m_nIndexMax = pCmdUI->m_pMenu->GetMenuItemCount();

  pCmdUI->m_bEnableChanged = TRUE;
}

void CMainFrame2::OnEncoding(UINT nID)
{
  ASSERT_VALID (this);
  ASSERT (nID >= ID_ENCODING_1);
  ASSERT (nID < (UINT) (ID_ENCODING_1 + nCodeNames + 1));
  CCrystalTextBuffer::m_nDefaultEncoding = nID - ID_ENCODING_1 - 1;
}

void CMainFrame2::OnUpdateEncoding(CCmdUI* pCmdUI)
{
  CMenu *pMenu = pCmdUI->m_pMenu ? pCmdUI->m_pMenu->GetSubMenu (0) : NULL;

  if (!pMenu)
    return;

  for (int iEnc = 0; iEnc < 16; iEnc++)
    pMenu->DeleteMenu (pCmdUI->m_nID + iEnc, MF_BYCOMMAND);

  TCHAR buf[40];
  LPCTSTR *pszCodeName = pszCodeNames;
  iEnc = 0;
  _stprintf (buf, _T("&%d %s"), iEnc++ % 10, _T ("No recoding"));
  pMenu->InsertMenu (pCmdUI->m_nIndex++, MF_STRING|MF_BYPOSITION|((DWORD) CCrystalTextBuffer::m_nDefaultEncoding == pCmdUI->m_nID - ID_ENCODING_1 - 1 ? MF_CHECKED : 0), pCmdUI->m_nID, buf);
  pCmdUI->m_nID++;
  do
    {
      _stprintf (buf, _T("&%d %s"), iEnc++ % 10, *pszCodeName++);
      pMenu->InsertMenu (pCmdUI->m_nIndex++, MF_STRING|MF_BYPOSITION|((DWORD) CCrystalTextBuffer::m_nDefaultEncoding == pCmdUI->m_nID - ID_ENCODING_1 - 1 ? MF_CHECKED : 0), pCmdUI->m_nID, buf);
      pCmdUI->m_nID++;
    }
  while (*pszCodeName);

  pCmdUI->m_nIndex--;
  pCmdUI->m_nIndexMax = pMenu->GetMenuItemCount();

  pCmdUI->m_bEnableChanged = TRUE;
}

⌨️ 快捷键说明

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