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

📄 mainfrm.cpp

📁 vc 和mapobjects地理信息系统组件开发 很有启发意义和参考价值
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -