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

📄 mainfrm.cpp

📁 数据结构链表的演示程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "ResultDlg.h"
#include "stdafx.h"
#include "LandSoft.h"

#include "MainFrm.h"
#include "lsview.h"
#include "txtview.h"
#include "lsdoc.h"
#include "tname.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	ON_WM_INITMENU()
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_PALETTECHANGED()
	ON_COMMAND(ID_VIEW_PICTUREWINDOW, OnViewPicturewindow)
	ON_COMMAND(ID_VIEW_RESULTWINDOW, OnViewResultwindow)
	ON_COMMAND(ID_ANALYZE_NAME, OnAnalyzeName)
	ON_COMMAND(IDC_AREA, OnArea)
	ON_COMMAND(IDC_BORDER, OnBorder)
	ON_COMMAND(IDC_CHIP, OnChip)
	ON_COMMAND(IDC_CONTAGION, OnContagion)
	ON_COMMAND(IDC_DIVERSITY, OnDiversity)
	ON_COMMAND(IDC_MATRIX, OnMatrix)
	ON_COMMAND(IDC_NUMBER, OnNumber)
	ON_COMMAND(IDC_ROLLOVER, OnRollover)
	ON_COMMAND(IDC_SHAPE, OnShape)
	ON_COMMAND(IDC_ALL, OnAll)
	ON_COMMAND(IDC_FLOCCULUS_AREA, OnFlocculusArea)
	ON_COMMAND(IDC_FLOCCULUS_LENG, OnFlocculusLeng)
	ON_COMMAND(IDC_LONG, OnLong)
	ON_COMMAND(IDC_INFO, OnInfo)
	ON_COMMAND(IDC_SPACE, OnSpace)
	ON_COMMAND(IDC_SAMPLE, OnSample)
	ON_COMMAND(IDC_SHOWLINE, OnShowline)
	ON_COMMAND(IDC_ALLINDEX, OnAllindex)
	ON_COMMAND(IDC_TYPEINDEX, OnTypeindex)
	ON_COMMAND(IDC_SPACE_AVERAREA, OnSpaceAverarea)
	ON_COMMAND(IDC_BOXDEFINE, OnBoxdefine)
	ON_COMMAND(IDC_SPACE_BLANCE, OnSpaceBlance)
	ON_COMMAND(IDC_SPACE_BLOCKNUM, OnSpaceBlocknum)
	ON_COMMAND(IDC_SPACE_CHIP, OnSpaceChip)
	ON_COMMAND(IDC_SPACE_CITY, OnSpaceCity)
	ON_COMMAND(IDC_SPACE_DIVERSITY, OnSpaceDiversity)
	ON_COMMAND(IDC_SPACE_JAMMING, OnSpaceJamming)
	ON_COMMAND(IDC_SPACE_PLANT, OnSpacePlant)
	ON_COMMAND(IDC_SPACE_RISK, OnSpaceRisk)
	ON_COMMAND(IDC_SPACE_VANTAGE, OnSpaceVantage)
	ON_COMMAND(IDC_TYPESPACE_AREA, OnTypespaceArea)
	ON_COMMAND(IDC_TYPESPACE_BLOCKNUM, OnTypespaceBlocknum)
	ON_COMMAND(IDC_TYPESPACE_CHIP, OnTypespaceChip)
	ON_COMMAND(IDC_SHOWBOX, OnShowbox)
	ON_COMMAND(IDC_AUTO_CORRELATION, OnAutoCorrelation)
	ON_COMMAND(IDC_TYPE_AUTOCORRE, OnTypeAutocorre)
	ON_COMMAND(IDC_EW_CORRE, OnEwCorre)
	ON_COMMAND(IDC_SN_CORRE, OnSnCorre)
	ON_COMMAND(ID_SE_CORRE, OnSeCorre)
	ON_COMMAND(ID_SW_CORRE, OnSwCorre)
	ON_COMMAND(IDC_TYPE_EW_CORRE, OnTypeEwCorre)
	ON_COMMAND(IDC_TYPE_SN_CORRE, OnTypeSnCorre)
	ON_COMMAND(ID_TYPE_SE_CORRE, OnTypeSeCorre)
	ON_COMMAND(ID_TYPE_SW_CORRE, OnTypeSwCorre)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_AVERAREA, OnAllDiffQuadAverarea)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_BLANCE, OnAllDiffQuadBlance)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_BLOCKNUM, OnAllDiffQuadBlocknum)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_CHIP, OnAllDiffQuadChip)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_CITY, OnAllDiffQuadCity)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_DIVERSITY, OnAllDiffQuadDiversity)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_JAMMING, OnAllDiffQuadJamming)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_PLANT, OnAllDiffQuadPlant)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_RISK, OnAllDiffQuadRisk)
	ON_COMMAND(IDC_ALL_DIFF_QUAD_VANTAGE, OnAllDiffQuadVantage)
	ON_COMMAND(IDC_TYPE_DIFF_QUAD_AVERAREA, OnTypeDiffQuadAverarea)
	ON_COMMAND(IDC_TYPE_DIFF_QUAD_BLOCKNUM, OnTypeDiffQuadBlocknum)
	ON_COMMAND(IDC_TYPE_DIFF_QUAD_CHIP, OnTypeDiffQuadChip)
	ON_COMMAND(IDC_ALL_DIST_CORRE_AVERAREA, OnAllDistCorreAverarea)
	ON_COMMAND(IDC_ALL_DIST_CORRE_BLANCE, OnAllDistCorreBlance)
	ON_COMMAND(IDC_ALL_DIST_CORRE_BLOCKNUM, OnAllDistCorreBlocknum)
	ON_COMMAND(IDC_ALL_DIST_CORRE_CHIP, OnAllDistCorreChip)
	ON_COMMAND(IDC_ALL_DIST_CORRE_CITY, OnAllDistCorreCity)
	ON_COMMAND(IDC_ALL_DIST_CORRE_DIVERSITY, OnAllDistCorreDiversity)
	ON_COMMAND(IDC_ALL_DIST_CORRE_JAMMING, OnAllDistCorreJamming)
	ON_COMMAND(IDC_ALL_DIST_CORRE_PLANT, OnAllDistCorrePlant)
	ON_COMMAND(IDC_ALL_DIST_CORRE_RISK, OnAllDistCorreRisk)
	ON_COMMAND(IDC_ALL_DIST_CORRE_VANTAGE, OnAllDistCorreVantage)
	ON_COMMAND(IDC_TYPE_DIST_CORRE_AVERAREA, OnTypeDistCorreAverarea)
	ON_COMMAND(IDC_TYPE_DIST_CORRE_BLOCKNUM, OnTypeDistCorreBlocknum)
	ON_COMMAND(IDC_TYPE_DIST_CORRE_CHIP, OnTypeDistCorreChip)
	ON_COMMAND(IDC_COEF_DEFINE, OnCoefDefine)
	ON_COMMAND(IDC_CITY_INDEX, OnCityIndex)
	ON_COMMAND(IDC_JAMMING_INDEX, OnJammingIndex)
	ON_COMMAND(IDC_PLANT_INDEX, OnPlantIndex)
	ON_COMMAND(IDC_RISK_INDEX, OnRiskIndex)
	ON_COMMAND(IDM_SHOWPOINT, OnShowpoint)
	ON_COMMAND(IDM_BOXPOINTLOAD, OnBoxPointLoad)
	ON_COMMAND(IDM_BOXPOINTSAVE, OnBoxPointSave)
	ON_COMMAND(IDM_QUERYBOXPOINT, OnQueryBoxPoint)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_AVERAREA, OnGcAllDistCorreAverarea)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_BLANCE, OnGcAllDistCorreBlance)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_BLOCKNUM, OnGcAllDistCorreBlocknum)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_CHIP, OnGcAllDistCorreChip)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_CITY, OnGcAllDistCorreCity)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_DIVERSITY, OnGcAllDistCorreDiversity)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_JAMMING, OnGcAllDistCorreJamming)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_PLANT, OnGcAllDistCorrePlant)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_RISK, OnGcAllDistCorreRisk)
	ON_COMMAND(IDC_GC_ALL_DIST_CORRE_VANTAGE, OnGcAllDistCorreVantage)
	ON_COMMAND(IDC_GC_AUTO_CORRELATION, OnGcAutoCorrelation)
	ON_COMMAND(IDC_GC_EW_CORRE, OnGcEwCorre)
	ON_COMMAND(IDC_GC_SE_CORRE, OnGcSeCorre)
	ON_COMMAND(IDC_GC_SN_CORRE, OnGcSnCorre)
	ON_COMMAND(IDC_GC_SW_CORRE, OnGcSwCorre)
	ON_COMMAND(IDC_GC_TYPE_AUTOCORRE, OnGcTypeAutocorre)
	ON_COMMAND(IDC_GC_TYPE_DIST_CORRE_AVERAREA, OnGcTypeDistCorreAverarea)
	ON_COMMAND(IDC_GC_TYPE_DIST_CORRE_BLOCKNUM, OnGcTypeDistCorreBlocknum)
	ON_COMMAND(IDC_GC_TYPE_DIST_CORRE_CHIP, OnGcTypeDistCorreChip)
	ON_COMMAND(IDC_GC_TYPE_EW_CORRE, OnGcTypeEwCorre)
	ON_COMMAND(IDC_GC_TYPE_SE_CORRE, OnGcTypeSeCorre)
	ON_COMMAND(IDC_GC_TYPE_SN_CORRE, OnGcTypeSnCorre)
	ON_COMMAND(IDC_GC_TYPE_SW_CORRE, OnGcTypeSwCorre)
	ON_COMMAND(IDC_LINE_SPACE, OnLineSpace)
	ON_COMMAND(IDM_ALL_TOGETHER, OnAllTogether)
	ON_COMMAND(IDC_ALL_TOGET_AVERAREA, OnAllTogetAverarea)
	ON_COMMAND(IDC_ALL_TOGET_BLANCE, OnAllTogetBlance)
	ON_COMMAND(IDC_ALL_TOGET_BLOCKNUM, OnAllTogetBlocknum)
	ON_COMMAND(IDC_ALL_TOGET_CHIP, OnAllTogetChip)
	ON_COMMAND(IDC_ALL_TOGET_CITY, OnAllTogetCity)
	ON_COMMAND(IDC_ALL_TOGET_DIVERSITY, OnAllTogetDiversity)
	ON_COMMAND(IDC_ALL_TOGET_JAMMING, OnAllTogetJamming)
	ON_COMMAND(IDC_ALL_TOGET_PLANT, OnAllTogetPlant)
	ON_COMMAND(IDC_ALL_TOGET_RISK, OnAllTogetRisk)
	ON_COMMAND(IDC_ALL_TOGET_VANTAGE, OnAllTogetVantage)
	ON_COMMAND(IDC_TYPE_TOGET_AVERAREA, OnTypeTogetAverarea)
	ON_COMMAND(IDC_TYPE_TOGET_BLOCKNUM, OnTypeTogetBlocknum)
	ON_COMMAND(IDC_TYPE_TOGET_CHIP, OnTypeTogetChip)
	//}}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)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,    
	ID_INDICATOR_XY,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.Create(this) ||
		!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
	}

	// TODO: Remove this if you don't want tool tips or a resizeable toolbar
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CMDIFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

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

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

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) 
{
	// Tell all children to remap palettes
	SendMessageToDescendants (WM_PALETTECHANGED,
		(WPARAM) (pFocusWnd->GetSafeHwnd ()));
	
	// Note: We don't need to handle WM_QUERYNEWPALETTE in CMainFrame.
	// Windows sends the message as part of the frame activation process.
	// However, at the time OnQueryNewPalette handles the message, there
	// is no active view to forward the message to. Instead, since the 
	// framework calls CView:: OnActivateView around the same time (and
	// when you switch between MDI views), we'll realize the palette
	// in the foreground there.
}

void CMainFrame::OnViewPicturewindow() 
{
	SwitchToView(theApp.m_pPictureTemplate,RUNTIME_CLASS(CLSView));	
}

void CMainFrame::OnViewResultwindow() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;
	}

	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}

void CMainFrame:: SwitchToView(CDocTemplate * pTemplate,CRuntimeClass *pViewClass)
{
	CDocument* pDoc=GetDocument();
	CView* pView;

	POSITION pos=pDoc->GetFirstViewPosition();
	while(pos!=NULL)
	{
		pView=pDoc->GetNextView(pos);
		if(pView->IsKindOf(pViewClass))
		{
			// the requested view class has already been created; show it
			pView->GetParentFrame()->ActivateFrame();
			return;
		}
	}

	CMDIChildWnd *pNewFrame=(CMDIChildWnd*)
		pTemplate->CreateNewFrame(pDoc,NULL);

	if(pNewFrame==NULL)
		return;

	pTemplate->InitialUpdateFrame(pNewFrame,pDoc);

	return;
}

BOOL CMainFrame::OnAnalyzeName()		// 得到各景观命名
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bCanExecute)
	{
		AfxMessageBox("该图像不能用于景观分析!",MB_OK,0);
		return FALSE;
	}

	CTypeName TypeName(this,pDoc->m_dib.m_Quads,
		pDoc->m_BlockTypes,pDoc->m_bEverName,
		pDoc->m_nMinArea,pDoc->m_bSaveTip);		// 调用对话框与用户交互
	if(TypeName.DoModal()!=IDOK)
	{
		return FALSE;
	}
	
	else
	{
		BOOL Change=FALSE;
		for (int i=0;i<pDoc->m_BlockTypes.GetSize();i++)	// 信息存入景观属性数组
		{
			if(pDoc->m_BlockTypes[i].Name!=TypeName.m_BlockTypes[i].Name)
			{
				pDoc->m_BlockTypes[i].Name=TypeName.m_BlockTypes[i].Name;
				Change=TRUE;
			}
		}

		pDoc->m_bEverName=TRUE;		// 已命名过
		pDoc->m_bSaveTip=TypeName.m_bSaveTip;
		
		if((pDoc->m_bDone==FALSE)||(pDoc->m_bOren8!=TypeName.m_bOren8))
			// 如果没有搜索过或改变搜索方法,则重新搜索
		{
			CWaitDlg waitdlg;
			waitdlg.Create(IDD_WAIT,NULL);
			waitdlg.m_ProgWait.SetRange(0,4);
			waitdlg.m_ProgWait.SetStep(1);
			waitdlg.m_ProgWait.StepIt();

			pDoc->m_bOren8=TypeName.m_bOren8;
			pDoc->CalcBlocks();

			waitdlg.m_ProgWait.StepIt();

			pDoc->CalcBlockBorders();

			waitdlg.m_ProgWait.StepIt();

			pDoc->IndexCalc();

			waitdlg.m_ProgWait.StepIt();

			pDoc->m_bDone=TRUE;
			Change=TRUE;
			pDoc->m_bEverAllSpace=FALSE;
//			pDoc->m_bEverAutoCorre=FALSE;
			pDoc->m_bRandom=TRUE;
			pDoc->m_nShow=SHOWALLPROPERTY;

			waitdlg.DestroyWindow();
		}
		if(pDoc->m_nMinArea!=TypeName.m_MinArea)	// 过滤条件	
		{
			pDoc->m_nMinArea=TypeName.m_MinArea;
			Change=TRUE;
		}

		if(Change)
			pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));

	return TRUE;
}

void CMainFrame::OnArea() 
{
	CLSDoc * pDoc=GetDocument();
	
	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}
	
	if(pDoc->m_nShow!=SHOWBLOCKAREA)
	{
		pDoc->m_nShow=SHOWBLOCKAREA;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
	if (pDoc->m_bSaveTip)
		pDoc->OnSaveDocument(NULL);
}

void CMainFrame::OnBorder() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}

	if(pDoc->m_nShow!=SHOWBLOCKCROSS)
	{
		pDoc->m_nShow=SHOWBLOCKCROSS;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
	if (pDoc->m_bSaveTip)
		pDoc->OnSaveDocument(NULL);
}

void CMainFrame::OnChip()	// 碎裂度指数 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}

	CString result;
	result.Format("\r\n\t*** 景观碎裂化类指数 ***\r\n\r\n整体碎裂化程度(FN1):\t%.4f\r\n\r\n景观名\t颜色值\t该类景观碎裂化程度(FN2)\r\n\r\n",
		pDoc->m_Results.AllChip);
	
	CString tmpstr;
	for(int i=0;i<pDoc->m_BlockTypes.GetSize();i++)
	{
		tmpstr.Format("%s\t%d\t%12.4f\r\n",
			pDoc->m_BlockTypes[i].Name,pDoc->m_BlockTypes[i].Val,
			pDoc->m_Results.TypeChip[i]);
		result=result+tmpstr;
	}

	tmpstr.Format("\r\n整体碎裂化指数(量算方法2) ---- FC1 :\t%.4f\r\n\r\n景观名\t颜色值\t该类景观碎裂化指数(FC)\r\n\r\n",
		pDoc->m_Results.AllChip2);

	result+=tmpstr;

	for(i=0;i<pDoc->m_BlockTypes.GetSize();i++)
	{
		tmpstr.Format("%s\t%d\t%12.4f\r\n",
			pDoc->m_BlockTypes[i].Name,pDoc->m_BlockTypes[i].Val,
			pDoc->m_Results.TypeChip2[i]);
		result=result+tmpstr;
	}

	CResultDlg resultdlg(this,result);
	resultdlg.DoModal();
	
}

void CMainFrame::OnContagion()	// 蔓延度指数 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}
	
	CString result;
	result.Format("\r\n景观蔓延度指数:\t%.4f\r\n",pDoc->m_Results.Contagion);
	CResultDlg resultdlg(this,result);
	resultdlg.DoModal();
}

void CMainFrame::OnDiversity()	// 多样性指数
{
	CLSDoc * pDoc=GetDocument();


	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}

	CString result;
	result.Format("\r\n\t*** 景观多样性类指数 ***\r\n\r\n景观多样性指数(H):\t%.4f\r\n最大多样性指数(Hmax):\t%.4f\r\n景观均匀度指数(E):\t%.4f\r\n景观优势度指数(D):\t%.4f\r\n",
		pDoc->m_Results.TrueDiversity,pDoc->m_Results.MaxDiversity,
		pDoc->m_Results.Blance,pDoc->m_Results.Vantage);
	CResultDlg resultdlg(this,result);
	resultdlg.DoModal();
}

void CMainFrame::OnLong() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return;

	}
	
	if(pDoc->m_nShow!=SHOWBLOCKLENGTH)
	{
		pDoc->m_nShow=SHOWBLOCKLENGTH;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
	if (pDoc->m_bSaveTip)
		pDoc->OnSaveDocument(NULL);
}

void CMainFrame::OnMatrix() 
{
	CLSDoc * pDoc=GetDocument();

⌨️ 快捷键说明

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