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