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

📄 mainfrm.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  ASSERT(pPopup != NULL);

  //---------------------------------------------------------------
  // Replace toolbar dummy items to the user-defined toolbar names:
  //---------------------------------------------------------------
  for (int i = 0; i < (int) pPopup->GetMenuItemCount ();)
    {
      UINT uiCmd = pPopup->GetMenuItemID (i);

      if (uiCmd >= ID_VIEW_USER_TOOLBAR1 && uiCmd < ID_VIEW_USER_TOOLBAR1 + iMaxUserToolbars)
        {
          //-------------------------------------------------------------------
          // "User toolbar" item. First check that toolbar number 'x' is exist:
          //-------------------------------------------------------------------
          CBCGToolBar* pToolBar = GetUserBarByIndex (uiCmd - ID_VIEW_USER_TOOLBAR1);
          if (pToolBar != NULL)
            {
              //-----------------------------------------------------------
              // Modify the current menu item text to the toolbar title and
              // move next:
              //-----------------------------------------------------------
              CString strToolbarName;
              pToolBar->GetWindowText (strToolbarName);

              pPopup->ModifyMenu (i ++, MF_BYPOSITION | MF_STRING, uiCmd, strToolbarName);
            }
          else
            {
              pPopup->DeleteMenu (i, MF_BYPOSITION);
            }
        }
      else	// Not "user toolbar" item, move next
        {
          i ++;
        }
    }

  CBCGPopupMenu* pPopupMenu = new CBCGPopupMenu;
  pPopupMenu->Create (this, point.x, point.y, pPopup->Detach ());

  return 0;
}

void CMainFrame::OnToolsViewUserToolbar (UINT uiId)
{
  CBCGToolBar* pUserToolBar = GetUserBarByIndex (uiId - ID_VIEW_USER_TOOLBAR1);
  if (pUserToolBar == NULL)
    {
      ASSERT (FALSE);
      return;
    }

  ShowControlBar (pUserToolBar, !(pUserToolBar->GetStyle () & WS_VISIBLE), FALSE);
  RecalcLayout ();
}

void CMainFrame::OnUpdateToolsViewUserToolbar (CCmdUI* pCmdUI)
{
  CBCGToolBar* pUserToolBar = GetUserBarByIndex (pCmdUI->m_nID - ID_VIEW_USER_TOOLBAR1);
  if (pUserToolBar == NULL)
    {
      pCmdUI->Enable (FALSE);
      return;
    }

  pCmdUI->Enable ();
  pCmdUI->SetCheck (pUserToolBar->GetStyle () & WS_VISIBLE);
}

afx_msg LRESULT CMainFrame::OnToolbarReset(WPARAM /*wp*/,LPARAM)
{
  // TODO: reset toolbar with id = (UINT) wp to its initial state:
  //
  // UINT uiToolBarId = (UINT) wp;
  // if (uiToolBarId == IDR_MAINFRAME)
  // {
  //		do something with m_wndToolBar
  // }

  return 0;
}

LRESULT CMainFrame::OnHelpCustomizeToolbars(WPARAM wp, LPARAM lp)
{
  int iPageNum = (int) wp;

  CBCGToolbarCustomize* pDlg = (CBCGToolbarCustomize*) lp;
  ASSERT_VALID (pDlg);

  // TODO: show help about page number iPageNum

  return 0;
}

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_DYNCREATE (CMainFrame2, CFrameWnd)

BEGIN_MESSAGE_MAP (CMainFrame2, CFrameWnd)
//{{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_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, CFrameWnd::OnHelpFinder)
ON_COMMAND (ID_HELP, CFrameWnd::OnHelp)
ON_COMMAND (ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
ON_COMMAND (ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
END_MESSAGE_MAP ()

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

CMainFrame2::CMainFrame2 ()
{
  // m_bFirst = TRUE;
	m_bFullScreen = false;
}

CMainFrame2:: ~ CMainFrame2 ()
{
}

void CMainFrame2::FullScreenOn ()
{
	// 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 (m_hWnd, GWL_STYLE);
	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);
	m_bFullScreen = false;
}

BOOL CMainFrame2::
PreCreateWindow (CREATESTRUCT & cs)
{
  CReg reg;
  if (reg.Open (HKEY_CURRENT_USER, REG_EDITPAD_SINGLE, 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 (!CFrameWnd::PreCreateWindow (cs))
    return FALSE;

  return TRUE;
}

int CMainFrame2::
OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  if (CFrameWnd::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

    }

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

  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;
}

BOOL CMainFrame2::
OnCreateClient (LPCREATESTRUCT /*lpcs */ ,
                CCreateContext * pContext)
{
  return m_wndSplitter.Create (this,
                               2, 2,    // TODO: adjust the number of rows, columns
                               CSize (10, 10),     // TODO: adjust the minimum pane size
                               pContext);
}

void CMainFrame2::OnClose()
{
  if (m_bFullScreen)
    FullScreenOff ();
  WINDOWPLACEMENT status;
  status.length = sizeof (WINDOWPLACEMENT);
  GetWindowPlacement (&status);

  CReg reg;
  if (reg.Create (HKEY_CURRENT_USER, REG_EDITPAD_SINGLE, 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);

  CFrameWnd::OnClose();
}

/*void CMainFrame2::ActivateFrame(int nCmdShow)
{
	if(m_bFirst)
	{
		m_bFirst = FALSE;

		WINDOWPLACEMENT status;
		
  CReg reg;
  if (reg.Open (HKEY_CURRENT_USER, REG_EDITPAD_SINGLE, KEY_READ))
    {
    bool result =
      reg.LoadNumber (_T ("ShowFlags"), (DWORD*) &status.flags) &&
      reg.LoadNumber (_T ("ShowCmd"), (DWORD*) &status.showCmd) &&

      reg.LoadNumber (_T ("Left"), (DWORD*) &status.rcNormalPosition.left) &&
      reg.LoadNumber (_T ("Top"), (DWORD*) &status.rcNormalPosition.top) &&
      reg.LoadNumber (_T ("Right"), (DWORD*) &status.rcNormalPosition.right) &&
      reg.LoadNumber (_T ("Bottom"), (DWORD*) &status.rcNormalPosition.bottom);
    if (result)
      {
		    CRect rect;

		    status.ptMinPosition = CPoint (0,0);
		    status.ptMaxPosition = CPoint (-::GetSystemMetrics (SM_CXBORDER), -::GetSystemMetrics (SM_CYBORDER));

		    // LoadBarState(theApp.m_pszProfileName);
		    status.length = sizeof (WINDOWPLACEMENT);
		    SetWindowPlacement (&status);
        if (status.showCmd == SW_SHOWMAXIMIZED || status.showCmd == SW_SHOWMINIMIZED || status.showCmd == SW_SHOWMINNOACTIVE || SW_MINIMIZE)
          {
            ShowWindow (status.showCmd);
          }
      }
    }
	}

	CFrameWnd::ActivateFrame (nCmdShow);
}*/

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

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

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

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

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

#endif                          //_DEBUG

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

//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)
{
	CFrameWnd::OnSetFocus (pOldWnd);	
	m_bGotFocus = 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 + -