📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "mapper.h"
#include "MainFrm.h"
#include "mapperlayerview.h"
#include "mapperview.h"
#include "mapexportdlg.h"
#include "LayerStatisticDlg.h"
#include "mapsetupdlg.h"
#include "layerinfodlg.h"
#include "layerrecorddlg.h"
#include "layerquerydlg.h"
#include "rendertipdlg.h"
#include "RenderDotDlg.h"
#include "RenderValueDlg.h"
#include "RenderChartDlg.h"
#include "renderpiedlg.h"
#include "renderbreakdlg.h"
#include "PointSetupDlg.h"
#include "LineSetupDlg.h"
#include "PolySetupDlg.h"
#include "seisliedudlg.h"
#include "queryinputdlg.h"
#include "seisunshisetdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_MAP_ADD_SHP, OnMapAddShp)
ON_COMMAND(ID_MAP_ADD_CAD, OnMapAddCad)
ON_COMMAND(ID_MAP_ADD_IMAGE, OnMapAddImage)
ON_COMMAND(ID_MAP_ADD_ARC, OnMapAddArc)
ON_COMMAND(ID_MAP_CLEAR_LAYER, OnMapClearLayer)
ON_COMMAND(ID_MAP_EXPORT, OnMapExport)
ON_COMMAND(ID_DRAW_FULL, OnDrawFull)
ON_COMMAND(ID_DRAW_PAN, OnDrawPan)
ON_COMMAND(ID_DRAW_REFRESH, OnDrawRefresh)
ON_COMMAND(ID_DRAW_ZOOMIN, OnDrawZoomin)
ON_COMMAND(ID_DRAW_ZOOMOUT, OnDrawZoomout)
ON_UPDATE_COMMAND_UI(ID_DRAW_PAN, OnUpdateDrawPan)
ON_UPDATE_COMMAND_UI(ID_DRAW_ZOOMIN, OnUpdateDrawZoomin)
ON_UPDATE_COMMAND_UI(ID_DRAW_ZOOMOUT, OnUpdateDrawZoomout)
ON_COMMAND(ID_QUERY_POINT, OnQueryPoint)
ON_COMMAND(ID_QUERY_LINE, OnQueryLine)
ON_COMMAND(ID_QUERY_RECT, OnQueryRect)
ON_COMMAND(ID_QUERY_POLY, OnQueryPoly)
ON_UPDATE_COMMAND_UI(ID_QUERY_POINT, OnUpdateQueryPoint)
ON_UPDATE_COMMAND_UI(ID_QUERY_LINE, OnUpdateQueryLine)
ON_UPDATE_COMMAND_UI(ID_QUERY_RECT, OnUpdateQueryRect)
ON_UPDATE_COMMAND_UI(ID_QUERY_POLY, OnUpdateQueryPoly)
ON_COMMAND(ID_QUERY_EXPORT, OnQueryExport)
ON_COMMAND(ID_QUERY_STATISTIC, OnQueryStatistic)
ON_COMMAND(ID_MAP_SETUP, OnMapSetup)
ON_COMMAND(ID_MAP_LAYER_INFO, OnMapLayerInfo)
ON_COMMAND(ID_QUERY_RECORD, OnQueryRecord)
ON_BN_CLICKED(IDC_MAP_QUERY, OnMapQuery)
ON_COMMAND(ID_QUERY_EXPRESSION, OnQueryExpression)
ON_COMMAND(ID_QUERY_CLEAR, OnQueryClear)
ON_COMMAND(ID_QUERY_DISTANCE, OnQueryDistance)
ON_UPDATE_COMMAND_UI(ID_QUERY_DISTANCE, OnUpdateQueryDistance)
ON_COMMAND(ID_QUERY_AREA, OnQueryArea)
ON_UPDATE_COMMAND_UI(ID_QUERY_AREA, OnUpdateQueryArea)
ON_COMMAND(ID_RENDER_DEFAULT, OnRenderDefault)
ON_COMMAND(ID_RENDER_LABEL, OnRenderLabel)
ON_COMMAND(ID_RENDER_PLACER, OnRenderPlacer)
ON_COMMAND(ID_RENDER_DOT, OnRenderDot)
ON_COMMAND(ID_RENDER_VALUE, OnRenderValue)
ON_COMMAND(ID_RENDER_BAR, OnRenderBar)
ON_COMMAND(ID_RENDER_PIE, OnRenderPie)
ON_COMMAND(ID_RENDER_BREAK, OnRenderBreak)
ON_COMMAND(ID_SHAPE_CIRCLE, OnShapeCircle)
ON_UPDATE_COMMAND_UI(ID_SHAPE_CIRCLE, OnUpdateShapeCircle)
ON_COMMAND(ID_SHAPE_ELLIPSE, OnShapeEllipse)
ON_UPDATE_COMMAND_UI(ID_SHAPE_ELLIPSE, OnUpdateShapeEllipse)
ON_COMMAND(ID_SHAPE_LINE, OnShapeLine)
ON_UPDATE_COMMAND_UI(ID_SHAPE_LINE, OnUpdateShapeLine)
ON_COMMAND(ID_SHAPE_POINT, OnShapePoint)
ON_UPDATE_COMMAND_UI(ID_SHAPE_POINT, OnUpdateShapePoint)
ON_COMMAND(ID_SHAPE_POLY, OnShapePoly)
ON_UPDATE_COMMAND_UI(ID_SHAPE_POLY, OnUpdateShapePoly)
ON_COMMAND(ID_SHAPE_RECT, OnShapeRect)
ON_UPDATE_COMMAND_UI(ID_SHAPE_RECT, OnUpdateShapeRect)
ON_COMMAND(ID_SHAPE_SETUP, OnShapeSetup)
ON_COMMAND(ID_SHAPE_EXPORT_SHP, OnShapeExportShp)
ON_COMMAND(ID_SHAPE_TEXT, OnShapeText)
ON_UPDATE_COMMAND_UI(ID_SHAPE_TEXT, OnUpdateShapeText)
ON_COMMAND(ID_SHAPE_DELETE, OnShapeDelete)
ON_COMMAND(ID_SHAPE_CLEAR, OnShapeClear)
ON_COMMAND(ID_SHAPE_SELECT, OnShapeSelect)
ON_UPDATE_COMMAND_UI(ID_SHAPE_SELECT, OnUpdateShapeSelect)
ON_COMMAND(ID_SHAPE_DATA, OnShapeData)
ON_COMMAND(ID_SHAPE_IMPORT, OnShapeImport)
ON_COMMAND(ID_SHAPE_CLEAR_ALL, OnShapeClearAll)
ON_COMMAND(ID_SHAPE_SAVE, OnShapeSave)
ON_COMMAND(ID_SHAPE_OPEN, OnShapeOpen)
ON_COMMAND(ID_SEIS_LIEDU, OnSeisLiedu)
ON_COMMAND(ID_SHAPE_QUERY, OnShapeQuery)
ON_COMMAND(ID_SEIS_EQ3_SHP, OnSeisEq3Shp)
ON_COMMAND(ID_MAP_LAYER_DUPLICATE, OnMapLayerDuplicate)
ON_COMMAND(ID_QUERY_INPUT, OnQueryInput)
ON_COMMAND(ID_SEIS_EQ3, OnSeisEq3)
ON_COMMAND(ID_MAP_HIDE_ALL, OnMapHideAll)
ON_COMMAND(ID_MAP_SHOW_ALL, OnMapShowAll)
ON_COMMAND(ID_MAP_SHOW_INVERT, OnMapShowInvert)
ON_COMMAND(ID_SEIS_EQ3_CLEAR, OnSeisEq3Clear)
ON_COMMAND(ID_SEIS_GRID_CLEAR, OnSeisGridClear)
ON_COMMAND(ID_SEIS_LIEDU_CLEAR, OnSeisLieduClear)
ON_COMMAND(ID_SEIS_SUNSHI, OnSeisSunshi)
ON_COMMAND(ID_SEIS_SUNSHI_CLEAR, OnSeisSunshiClear)
ON_COMMAND(ID_SEIS_LIEDU_QUERY, OnSeisLieduQuery)
ON_COMMAND(ID_SEIS_GRID, OnSeisGrid)
ON_COMMAND(ID_SHAPE_SHAPE_QUERY, OnShapeShapeQuery)
ON_COMMAND(ID_SEIS_EQ3_SHP_LEVEL, OnSeisEq3ShpLevel)
ON_COMMAND(ID_SEIS_SHP, OnSeisShp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_POSITION_SCREEN,
ID_POSITION_MAP,
ID_INFO_STRING,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
static UINT BASED_CODE PaletteButtons[] =
{
// same order as in the bitmap 'toolbar.bmp'
ID_DRAW_REFRESH,
ID_DRAW_FULL,
ID_DRAW_ZOOMIN,
ID_DRAW_ZOOMOUT,
ID_DRAW_PAN,
ID_PALETTE_PEN,
ID_SHAPE_POINT,
ID_SHAPE_LINE,
ID_SHAPE_RECT,
ID_SHAPE_CIRCLE,
ID_SHAPE_ELLIPSE,
ID_SHAPE_POLY,
ID_SHAPE_TEXT,
ID_SHAPE_SELECT
};
static UINT BASED_CODE EditButtons[] =
{
// same order as in the bitmap 'toolbar.bmp'
ID_QUERY_POINT,
ID_QUERY_LINE,
ID_QUERY_RECT,
ID_QUERY_POLY,
ID_QUERY_EXPRESSION,
ID_QUERY_DISTANCE,
ID_QUERY_AREA,
ID_QUERY_INPUT
};
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndDlgBar.Create(this, IDR_MAINFRAME, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
//if (!m_wndDlgBar.Create(this, CG_IDD_QUERY_BAR, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
{
TRACE0("Failed to create dialogbar\n");
return -1; // fail to create
}
if (!m_wndReBar.Create(this) ||!m_wndReBar.AddBar(&m_wndToolBar) ||!m_wndReBar.AddBar(&m_wndDlgBar))
{
TRACE0("Failed to create rebar\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
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
EnableDocking(CBRS_ALIGN_ANY);
CreateFloatBar();
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_wndSplitter.CreateStatic(this, 1, 2);
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMapperLayerView),
CSize(100,30), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMapperView),
CSize(10,300), pContext);
m_wndSplitter.RecalcLayout();
return TRUE;
}
void CMainFrame::OnMapAddShp()
{
//使用最后打开路径
CIniFile fini;
fini.SetFileName(theApp.m_sRunPath+"\\mapper.ini");
CString sLastPath=fini.ReadString("PATH","ShpLast","");
//增加图层,可以同时添加多个
CFileDialog fd(TRUE,NULL,NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,
"SHP文件(*.shp)|*.shp||",this);
fd.m_ofn.lpstrInitialDir=sLastPath;
fd.m_ofn.nMaxFile=1024;
CString str(" ", 10240);
fd.m_ofn.lpstrFile=str.GetBuffer(10240);
str.ReleaseBuffer();
if(fd.DoModal()!=IDOK)
return;
srand((unsigned)time(NULL));
int n=0;
CString sPathFile("",256),sTitle;
POSITION pos=fd.GetStartPosition();
COLORREF color;
int r,g,b;
CMapperView *pMap=theApp.GetMapPane();
CMapperLayerView *pLayer=theApp.GetLayerPane();
while(pos!=NULL)
{
//需要检查重复的图层
sPathFile=fd.GetNextPathName(pos);
Eng_GetRandInt(0,255,r,g,b);
color=RGB(r,g,b);
Eng_AddLayerMap(pMap->m_map,sPathFile,color);
n++;
}
//当选择了一个文件,返回文件和路径;如果多个则只返回路径
if(n>1)
{
fini.WriteString("PATH","ShpLast",fd.GetPathName());
}
else
{
Eng_GetPathOfPathFile(fd.GetPathName(),sLastPath);
fini.WriteString("PATH","ShpLast",sLastPath);
}
Eng_SetLegend(pMap->m_map,pLayer->m_legend);
CMapperDoc *pDoc=(CMapperDoc*)GetActiveDocument();
pDoc->SetModifiedFlag();
}
void CMainFrame::OnMapAddCad()
{
//使用最后打开路径
CIniFile fini;
fini.SetFileName(theApp.m_sRunPath+"\\mapper.ini");
CString sLastPath=fini.ReadString("PATH","CadLast","");
//增加图层,可以同时添加多个
CFileDialog fd(TRUE,NULL,NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,
"CAD文件(*.dwg,*.dxf)|*.dwg;*.dxf||",this);
fd.m_ofn.lpstrInitialDir=sLastPath;
if(fd.DoModal()!=IDOK)
return;
srand((unsigned)time(NULL));
int n=0;
CString sPathFile,sTitle;
POSITION pos=fd.GetStartPosition();
COLORREF color;
int r,g,b;
CMapperView *pMap=theApp.GetMapPane();
CMapperLayerView *pLayer=theApp.GetLayerPane();
while(pos!=NULL)
{
//需要检查重复的图层
sPathFile=fd.GetNextPathName(pos);
Eng_GetFileOfPathFile(sPathFile,sTitle);
Eng_GetRandInt(0,255,r,g,b);
color=RGB(r,g,b);
Eng_GetFileOfPathFile(sPathFile,sTitle);
Eng_AddLayerCad(pMap->m_map,sPathFile,color);
n++;
}
//当选择了一个文件,返回文件和路径;如果多个则只返回路径
if(n>1)
{
fini.WriteString("PATH","CadLast",fd.GetPathName());
}
else
{
Eng_GetPathOfPathFile(fd.GetPathName(),sLastPath);
fini.WriteString("PATH","CadLast",sLastPath);
}
Eng_SetLegend(pMap->m_map,pLayer->m_legend);
CMapperDoc *pDoc=(CMapperDoc*)GetActiveDocument();
pDoc->SetModifiedFlag();
}
void CMainFrame::OnMapAddImage()
{
//使用最后打开路径
CIniFile fini;
fini.SetFileName(theApp.m_sRunPath+"\\mapper.ini");
CString sLastPath=fini.ReadString("PATH","ImageLast","");
//增加图层,可以同时添加多个
CFileDialog fd(TRUE,NULL,NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,
"图像文件(*.tif,*.tiff,*.jpg,*.jpeg,*.bmp,*.gif)|*.tif;*.tiff;*.jpg;*.jpeg;*.bmp;*.gif||",this);
fd.m_ofn.lpstrInitialDir=sLastPath;
if(fd.DoModal()!=IDOK)
return;
srand((unsigned)time(NULL));
int n=0;
CString sPathFile,sTitle;
POSITION pos=fd.GetStartPosition();
COLORREF color;
int r,g,b;
CMapperView *pMap=theApp.GetMapPane();
CMapperLayerView *pLayer=theApp.GetLayerPane();
while(pos!=NULL)
{
//需要检查重复的图层
sPathFile=fd.GetNextPathName(pos);
Eng_GetFileOfPathFile(sPathFile,sTitle);
Eng_GetRandInt(0,255,r,g,b);
color=RGB(r,g,b);
Eng_GetFileOfPathFile(sPathFile,sTitle);
Eng_AddLayerImage(pMap->m_map,sPathFile,color);
n++;
}
//当选择了一个文件,返回文件和路径;如果多个则只返回路径
if(n>1)
{
fini.WriteString("PATH","ImageLast",fd.GetPathName());
}
else
{
Eng_GetPathOfPathFile(fd.GetPathName(),sLastPath);
fini.WriteString("PATH","ImageLast",sLastPath);
}
Eng_SetLegend(pMap->m_map,pLayer->m_legend);
CMapperDoc *pDoc=(CMapperDoc*)GetActiveDocument();
pDoc->SetModifiedFlag();
}
void CMainFrame::OnMapAddArc()
{
//使用最后打开路径
CIniFile fini;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -