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