📄 plxcdoc.cpp
字号:
#include "stdafx.h"
#include "plxc.h"
#include "plxcDoc.h"
#include "FileSelectionDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CPlxcDoc, CDocument)
BEGIN_MESSAGE_MAP(CPlxcDoc, CDocument)
//{{AFX_MSG_MAP(CPlxcDoc)
ON_COMMAND(IDM_BUILD, OnBuild)
ON_COMMAND(IDM_COMPILE, OnCompile)
ON_COMMAND(IDM_BUILDRELEASE, OnBuildrelease)
ON_COMMAND(IDM_RUN, OnRun)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(IDM_SEARCHTEXT, OnSearchtext)
ON_COMMAND(IDM_STARTDEBUG, OnStartdebug)
ON_UPDATE_COMMAND_UI(IDM_STARTDEBUG, OnUpdateStartdebug)
ON_COMMAND(IDM_STEPIN, OnStepin)
ON_UPDATE_COMMAND_UI(IDM_STEPIN, OnUpdateStepin)
// ON_COMMAND(IDM_STEPOUT, OnStepout)
// ON_UPDATE_COMMAND_UI(IDM_STEPOUT, OnUpdateStepout)
ON_COMMAND(IDM_STOPDEBUG, OnStopdebug)
ON_UPDATE_COMMAND_UI(IDM_STOPDEBUG, OnUpdateStopdebug)
// ON_COMMAND(IDM_STRPOVER, OnStrpover)
// ON_UPDATE_COMMAND_UI(IDM_STRPOVER, OnUpdateStrpover)
ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CPlxcDoc::CPlxcDoc()
{
GetMainFrameP();
}
CPlxcDoc::~CPlxcDoc()
{
}
void CPlxcDoc::GetMainFrameP()
{
pMainFrm = (CMainFrame*)::AfxGetMainWnd();
}
/* 在首次视图开启或者新建立一个视图的时候会触发这个消息,也是加载的好时机 */
BOOL CPlxcDoc::OnNewDocument()
{
CString strFilePath = GetNewFileName();
InitBoss();
LPACTION pAction = new ACTION();
pAction->msg = WM_APP_FILE_NEW;
pAction->text = strFilePath;
MsgTransmitProc(pAction);
if(pAction->lParam == FALSE)
return FALSE;
delete pAction;
/* 获取新建文件的名字 */
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
CString CPlxcDoc::GetNewFileName()
{
CFileSelectionDlg m_newFileName;
if(m_newFileName.DoModal() != IDOK)
{
return _T("");
}
return m_newFileName.m_strFilePath;
}
BOOL CPlxcDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
InitBoss();
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
LPACTION pAction = new ACTION();
pAction->msg = WM_APP_FILE_OPEN;
pAction->text = lpszPathName;
MsgTransmitProc(pAction);
delete pAction;
return TRUE;
}
BOOL CPlxcDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
LPACTION pAction = new ACTION();
pAction->msg = WM_APP_FILE_SAVE;
pAction->text = lpszPathName;
MsgTransmitProc(pAction);
if(pAction->lParam == 0)
{
MessageBox(NULL,_T("Save file failure!"),_T("Error"),MB_OK);
}
delete pAction;
return 1;
}
/* 一定要把发送信息代码放到调用底层函数之前这样才不会消除boss */
void CPlxcDoc::OnCloseDocument()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_APP_FILE_CLOSE;
MsgTransmitProc(pAction);
delete pAction;
CDocument::OnCloseDocument();
}
bool CPlxcDoc::GetCurrentDebugSates()
{
CPlxcApp *pApp = (CPlxcApp*)AfxGetApp();
ASSERT_VALID(pApp);
return pApp->GetDebugState();
}
void CPlxcDoc::SetCurrentDebugState(bool bState)
{
CPlxcApp *pApp = (CPlxcApp*)AfxGetApp();
ASSERT_VALID(pApp);
pApp->SetDebugState(bState);
}
/*---------------------------------------------------------------------------------*/
void CPlxcDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
}
else
{
}
}
#ifdef _DEBUG
void CPlxcDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CPlxcDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
#include "MainFrm.h"
/* 向boss传递界面信息 */
void CPlxcDoc::InitBoss()
{
GetMainFrameP();
LPACTION pAction = new ACTION();
pAction->msg = WM_INITDOCUMENT;
pAction->pWnd = &(pMainFrm->m_debugInfoDlg.m_debugInfoEditView);
pAction->wParam = IDENT_WND_DEBUG;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_cbSearchText);
pAction->wParam = IDENT_WND_COMBOSEARCH;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_cbEditfileName);
pAction->wParam = IDENT_WND_COMBOFILENAME;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_sourceInfoDlg.m_ctrlFileTree);
pAction->wParam = IDENT_WND_FILELIST;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_debugOutInfoDlg.m_codeView);
pAction->wParam = IDENT_WND_CODEVIEW;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_debugOutInfoDlg.m_resultView);
pAction->wParam = IDENT_WND_RESULTVIEW;
MsgTransmitProc(pAction);
pAction->pWnd = &(pMainFrm->m_debugOutInfoDlg.m_variableList);
pAction->wParam = IDENT_WND_VARIABLELIST;
MsgTransmitProc(pAction);
delete pAction;
}
/* 消息转发中心 */
void CPlxcDoc::MsgTransmitProc(LPACTION pAction)
{
boss.DefMsgProc(pAction);
}
/* 菜单处理 build */
void CPlxcDoc::OnBuild()
{
if(GetCurrentDebugSates())
{
::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
return;
}
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_BUILD;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnCompile()
{
if(GetCurrentDebugSates())
{
::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
return;
}
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_COMPILE;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnBuildrelease()
{
}
void CPlxcDoc::OnRun()
{
if(GetCurrentDebugSates())
{
::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
return;
}
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_RUN;
MsgTransmitProc(pAction);
delete pAction;
}
/*********************************************************************************/
/* 点击编译,build恢复debug窗体,注意不要使用ShowControlBar因为它并没有改变变量值 */
void CPlxcDoc::StepIntoCompileUI(bool flags)
{
if(flags == TRUE)
{
if(pMainFrm->m_bDebugInfo)
pMainFrm->PostMessage(WM_COMMAND,IDM_WND_DEBUG,0);
if(pMainFrm->m_bSourceInfo)
pMainFrm->PostMessage(WM_COMMAND,IDM_WND_SOURCEINFO,0);
pMainFrm->ShowDebugOutInfo();
}else
{
pMainFrm->PostMessage(WM_COMMAND,IDM_WND_DEBUG,0);
pMainFrm->PostMessage(WM_COMMAND,IDM_WND_SOURCEINFO,0);
pMainFrm->ShowDebugOutInfo();
}
}
void CPlxcDoc::OnEditCut()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_CUT;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnEditPaste()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_PASTE;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnEditUndo()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_UNDO;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnEditCopy()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_COPY;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnSearchtext()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_SEARCHSTRING;
MsgTransmitProc(pAction);
delete pAction;
}
/********************************** 调试 ***************************************/
/* 开始调试 */
void CPlxcDoc::OnStartdebug()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_DEBUG;
MsgTransmitProc(pAction);
int result = pAction->wParam;
delete pAction;
if(result != 0)
{
SetCurrentDebugState(TRUE);
StepIntoCompileUI(TRUE);
}
}
void CPlxcDoc::OnUpdateStartdebug(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!GetCurrentDebugSates());
}
/* 跟踪进入 */
void CPlxcDoc::OnStepin()
{
LPACTION pAction = new ACTION();
pAction->msg = WM_COM_STEPINTO;
MsgTransmitProc(pAction);
delete pAction;
}
void CPlxcDoc::OnUpdateStepin(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetCurrentDebugSates());
}
/* 停止调试 */
void CPlxcDoc::OnStopdebug()
{
SetCurrentDebugState(FALSE);
StepIntoCompileUI(FALSE);
}
void CPlxcDoc::OnUpdateStopdebug(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetCurrentDebugSates());
}
/* 新建,打开,关闭三个系统按钮在调试开启后不可使用 */
void CPlxcDoc::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!GetCurrentDebugSates());
}
void CPlxcDoc::OnUpdateFileOpen(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!GetCurrentDebugSates());
}
void CPlxcDoc::OnUpdateFileClose(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!GetCurrentDebugSates());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -