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

📄 mainfrm.cpp

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

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

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

void CMainFrame::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 CMainFrame::OnProjectSaveAs()
{
  if (g_pProject)
    theApp.SaveProjectAs ();
}

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

void CMainFrame::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 CMainFrame::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);
  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;
}

extern EDITPADC_CLASS LPCTSTR pszCodeNames[];
extern EDITPADC_CLASS int nCodeNames;

void CMainFrame::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 CMainFrame::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;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame2

IMPLEMENT_DYNAMIC (CMainFrame2, CMDIFrameWnd)

BEGIN_MESSAGE_MAP (CMainFrame2, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame2)
ON_WM_CREATE ()
ON_WM_CLOSE()
ON_WM_SETFOCUS()
ON_COMMAND(ID_VIEW_FULL_SCREEN, OnViewFullScreen)
ON_UPDATE_COMMAND_UI(ID_VIEW_FULL_SCREEN, OnUpdateViewFullScreen)
ON_COMMAND(ID_FILE_CLOSE_ALL, OnFileCloseAll)
ON_COMMAND(ID_WINDOW_CLOSE, OnCloseWindow)
ON_COMMAND(ID_WINDOW_NEXT, OnNextWindow)
ON_COMMAND(ID_WINDOW_PREV, OnPrevWindow)
ON_UPDATE_COMMAND_UI(ID_WINDOW_CLOSE, OnUpdateCloseWindow)
ON_UPDATE_COMMAND_UI(ID_WINDOW_NEXT, OnUpdateNextWindow)
ON_UPDATE_COMMAND_UI(ID_WINDOW_PREV, OnUpdatePrevWindow)
ON_COMMAND_EX(ID_VIEW_WORKSPACE_BAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_WORKSPACE_BAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_OUTPUT_BAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_OUTPUT_BAR, OnUpdateControlBarMenu)
ON_COMMAND(ID_VIEW_EXPLORER, OnExplorer)
ON_UPDATE_COMMAND_UI(ID_VIEW_EXPLORER, OnUpdateExplorer)
ON_COMMAND(ID_VIEW_PROJECT, OnProject)
ON_UPDATE_COMMAND_UI(ID_VIEW_PROJECT, OnUpdateProject)
ON_COMMAND(ID_PROJECT_NEW, OnProjectNew)
ON_UPDATE_COMMAND_UI(ID_PROJECT_NEW, OnUpdateProjectNew)
ON_COMMAND(ID_PROJECT_OPEN, OnProjectOpen)
ON_UPDATE_COMMAND_UI(ID_PROJECT_OPEN, OnUpdateProjectOpen)
ON_COMMAND(ID_PROJECT_RELOAD, OnProjectReload)
ON_UPDATE_COMMAND_UI(ID_PROJECT_RELOAD, OnUpdateProjectReload)
ON_COMMAND(ID_PROJECT_CLOSE, OnProjectClose)
ON_UPDATE_COMMAND_UI(ID_PROJECT_CLOSE, OnUpdateProjectClose)
ON_COMMAND(ID_PROJECT_SAVE, OnProjectSave)
ON_UPDATE_COMMAND_UI(ID_PROJECT_SAVE, OnUpdateProjectSave)
ON_COMMAND(ID_PROJECT_SAVE_AS, OnProjectSaveAs)
ON_UPDATE_COMMAND_UI(ID_PROJECT_SAVE_AS, OnUpdateProjectSaveAs)
ON_COMMAND_EX_RANGE(ID_PROJECT_MRU_FIRST, ID_PROJECT_MRU_LAST, OnMruProject)
ON_UPDATE_COMMAND_UI(ID_PROJECT_MRU_FIRST, OnUpdateMruProject)
ON_COMMAND_EX_RANGE(ID_ENCODING_FIRST, ID_ENCODING_LAST, OnEncoding)
ON_UPDATE_COMMAND_UI(ID_ENCODING_FIRST, OnUpdateEncoding)
//}}AFX_MSG_MAP
// Global help commands
ON_COMMAND (ID_HELP_FINDER, CMDIFrameWnd::OnHelpFinder)
ON_COMMAND (ID_HELP, CMDIFrameWnd::OnHelp)
ON_COMMAND (ID_CONTEXT_HELP, CMDIFrameWnd::OnContextHelp)
ON_COMMAND (ID_DEFAULT_HELP, CMDIFrameWnd::OnHelpFinder)
ON_MESSAGE (WM_OPEN_HERE, OnOpenHere)
END_MESSAGE_MAP ()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame2 construction/destruction

CMainFrame2::CMainFrame2 ()
{
	m_bFullScreen = false;
}

CMainFrame2:: ~ CMainFrame2 ()
{
}

void CMainFrame2::FullScreenOn ()
{
	// available only if there is an active doc
	CMDIChildWnd *pChild = MDIGetActive();
	if (!pChild)
    return;
	// m_bToolBarWasVisible = m_wndToolBar.IsWindowVisible () != FALSE;
  // if (m_bToolBarWasVisible)
	//   m_wndToolBar.ShowWindow (SW_HIDE);
	m_bStatusBarWasVisible = m_wndStatusBar.IsWindowVisible () != FALSE;
  if (m_bStatusBarWasVisible)
	  m_wndStatusBar.ShowWindow (SW_HIDE);
	// first create the new toolbar
	// this will contain the full-screen off button
	m_pwndFullScreenBar = new CToolBar;
	m_pwndFullScreenBar->Create (this);
	m_pwndFullScreenBar->LoadToolBar (IDR_FULLSCREEN);
	m_pwndFullScreenBar->SetBarStyle (m_pwndFullScreenBar->GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
	// to look better:
	m_pwndFullScreenBar->ModifyStyle (0, TBSTYLE_FLAT);
	m_pwndFullScreenBar->EnableDocking (0);
	// place the full-screen off button somewhere:
	CPoint pt(600, 440);
	FloatControlBar (m_pwndFullScreenBar, pt);
	// remove the caption of the mainWnd:
	LONG style =:: GetWindowLong (m_hWnd, GWL_STYLE);
	m_bMax = style & WS_MAXIMIZE ? true : false;
	if (m_bMax)
    ShowWindow (SW_RESTORE);
	// now save the old positions of the main and child windows
	GetWindowRect (&m_mainRect);
	style &= ~(WS_CAPTION|WS_MAXIMIZE);
	::SetWindowLong (m_hWnd, GWL_STYLE, style);
	int screenx = GetSystemMetrics (SM_CXSCREEN);
	int screeny = GetSystemMetrics (SM_CYSCREEN);
	// resize:
	SetWindowPos (NULL, -4, -4, screenx + 8, screeny + 8, SWP_NOZORDER);
	style = ::GetWindowLong (pChild->m_hWnd, GWL_STYLE);
	m_bChildMax = style & WS_MAXIMIZE ? true : false;
	// note here: m_bMainMax is not needed since m_hWnd only
	// changed its caption...
	// and maximize the child window
	// it will remove its caption, too.
	pChild->ShowWindow (SW_SHOWMAXIMIZED);
	RecalcLayout ();
	m_bFullScreen = true;
}

void CMainFrame2::FullScreenOff ()
{
	// You can use SaveBarState() in OnClose(),
	// so remove the newly added toolbar entirely
	// in order SaveBarState() not
	// to save its state. That is why I used dynamic
	// allocation
	delete m_pwndFullScreenBar;
	LONG style = ::GetWindowLong (m_hWnd, GWL_STYLE);
	style |= WS_CAPTION;
	::SetWindowLong (m_hWnd, GWL_STYLE, style);
	// if (m_bToolBarWasVisible)
	//	m_wndToolBar.ShowWindow (SW_SHOW);
	if (m_bStatusBarWasVisible)
		m_wndStatusBar.ShowWindow (SW_SHOW);
	MoveWindow (&m_mainRect);
	RecalcLayout ();
	if (m_bMax)
    ShowWindow (SW_SHOWMAXIMIZED);
	CMDIChildWnd *pChild = MDIGetActive ();
	// pchild can be NULL if the USER closed all the
	// childs during Full Screen Mode:
	if(pChild)
    {
		  if(m_bChildMax)
			  MDIMaximize (pChild);
		  else
        MDIRestore (pChild);
	  }
	m_bFullScreen = false;
}

int CMainFrame2::MDIGetCount ()
{
  ASSERT (::IsWindow (m_hWnd));
  int nCount = 0;
  CWnd * pWnd = GetWindow (GW_CHILD);
  ASSERT (pWnd);
  pWnd = pWnd->GetWindow (GW_CHILD);
  while (pWnd)
    {
      nCount++;
      pWnd = pWnd->GetWindow (GW_HWNDNEXT);
    }
  return nCount;
}

BOOL CMainFrame2::
PreCreateWindow (CREATESTRUCT & cs)
{
  CReg reg;
  if (reg.Open (HKEY_CURRENT_USER, REG_EDITPAD_IDE, KEY_READ))
    {
      // reg.LoadNumber (_T ("ShowFlags"), (DWORD*) &status.flags);
      reg.LoadNumber (_T ("ShowCmd"), (DWORD*) &theApp.m_nCmdShow);

      if (reg.LoadNumber (_T ("Left"), (DWORD*) &cs.x) &&
        reg.LoadNumber (_T ("Right"), (DWORD*) &cs.cx))
        {
          cs.cx -= cs.x;
        }
      if (reg.LoadNumber (_T ("Top"), (DWORD*) &cs.y) &&
        reg.LoadNumber (_T ("Bottom"), (DWORD*) &cs.cy))
        {
          cs.cy -= cs.y;
        }
    }


  if (!CMDIFrameWnd::PreCreateWindow (cs))
    return FALSE;

  return TRUE;
}

void CMainFrame2::
ChooseStatusBar (BOOL bActivate)
{
  if (m_bActivated != bActivate)
    {
      if (bActivate)
        m_wndStatusBar.SetIndicators (indicators1, sizeof (indicators1) / sizeof (UINT));
      else
        m_wndStatusBar.SetIndicators (indicators, sizeof (indicators) / sizeof (UINT));
      m_bActivated = bActivate;
    }
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame2 diagnostics

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

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

#endif                          //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame2 message handlers

int CMainFrame2::
OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  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 (indicators, sizeof (indicators) / sizeof (UINT)))
    {
      TRACE0 ("Failed to create status bar\n");
      return -1;                // fail to create

    }

  m_bActivated = FALSE;

  CString strMainToolbarTitle;
  strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR);
  m_wndToolBar.SetWindowText (strMainToolbarTitle);
  m_wndToolBar.EnableDocking (CBRS_ALIGN_ANY);
  EnableDocking (CBRS_ALIGN_ANY);
  DockControlBar (&m_wndToolBar);

  {
    CRect rect (40, 40, 260, 440);
    m_wndWorkspaceBar.CreateBar (_T ("Workspace"), rect, SCBS_FULLDRAG|SCBS_GRIPPER|SCBS_SHOWEDGES, ABS_DOCKLEFT|ABS_VISIBLE, ID_VIEW_WORKSPACE_BAR, this);
    m_wndWorkspaceBar.SetBarStyle (m_wndWorkspaceBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  }

  {
    CRect rect (40, 40, 440, 140);
    m_wndOutputBar.CreateBar (_T ("Output"), rect, SCBS_FULLDRAG|SCBS_GRIPPER|SCBS_SHOWEDGES, ABS_DOCKBOTTOM|ABS_VISIBLE, ID_VIEW_OUTPUT_BAR, this);
    m_wndOutputBar.SetBarStyle (m_wndOutputBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

⌨️ 快捷键说明

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