?? mapgisview.cpp
字號(hào):
// MapGisView.cpp : implementation of the CMapGisView class
//
#include "stdafx.h"
#include "MapGis.h"
#include "MapGisDoc.h"
#include "MapGisView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMapGisView
IMPLEMENT_DYNCREATE(CMapGisView, CView)
BEGIN_MESSAGE_MAP(CMapGisView, CView)
//{{AFX_MSG_MAP(CMapGisView)
ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_MAP_TOOL_DISTANCE, OnMapToolDistance)
ON_COMMAND(ID_MAP_TOOL_PAN, OnMapToolPan)
ON_COMMAND(ID_MAP_TOOL_RADIUSSELECT, OnMapToolRadiusselect)
ON_COMMAND(ID_MAP_TOOL_ZOOMIN, OnMapToolZoomin)
ON_COMMAND(ID_MAP_TOOL_ZOOMOUT, OnMapToolZoomout)
ON_COMMAND(ID_VIEW_LAYERCONTROL, OnViewLayercontrol)
ON_COMMAND(ID_MAP_TOOL_RECTANGLESELECT, OnMapToolRectangleselect)
ON_COMMAND(ID_MAP_TOOL_SELECT, OnMapToolSelect)
ON_UPDATE_COMMAND_UI(ID_MAP_TOOL_ZOOMIN, OnUpdateMapToolZoomin)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
//定義MapX工具事件
BEGIN_EVENTSINK_MAP(CMapGisView, CView)
ON_EVENT(CMapGisView, IDC_MAP, MAPX_DISPID_POLYTOOLUSED /* PolyToolUsed */, OnPolyToolUsedMap, VTS_I2 VTS_I4 VTS_DISPATCH VTS_BOOL VTS_BOOL VTS_PBOOL)
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMapGisView construction/destruction
CMapGisView::CMapGisView()
{
// TODO: add construction code here
}
CMapGisView::~CMapGisView()
{
}
BOOL CMapGisView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMapGisView drawing
void CMapGisView::OnDraw(CDC* pDC)
{
CMapGisDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CMapGisView printing
BOOL CMapGisView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMapGisView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMapGisView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMapGisView diagnostics
#ifdef _DEBUG
void CMapGisView::AssertValid() const
{
CView::AssertValid();
}
void CMapGisView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMapGisDoc* CMapGisView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMapGisDoc)));
return (CMapGisDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMapGisView message handlers
int CMapGisView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
SetCapture();
BeginWaitCursor();
try
{
CRect ViewRect;
GetClientRect(ViewRect);
//創(chuàng)建MapX地圖對象
m_bMapData=m_ctrlMapX.Create(NULL, WS_VISIBLE, ViewRect, this, IDC_MAP);
if (m_bMapData==FALSE)
{
AfxMessageBox("無法建立地理圖!");
return -1;
}
//取當(dāng)前路徑
char m_CurrentPath[250];
GetCurrentDirectory(250,m_CurrentPath);
char m_strGst[250];
strcpy(m_strGst, m_CurrentPath);
strcat(m_strGst,"\\GST\\China地圖.gst");
//設(shè)置地圖屬性
m_ctrlMapX.SetGeoSet(m_strGst); //打開工程文件“China地圖.gst”
//m_ctrlMapX.SetTitleText(""); //不顯示地圖標(biāo)題
m_ctrlMapX.SetMapUnit(1); //長度單位(公里)
m_ctrlMapX.SetAreaUnit(15); //面積單位(平方公里)
// 建立用于距離測量自定義工具
m_ctrlMapX.CreateCustomTool(MYTOOL_DISTANCE, miToolTypePoly, miCrossCursor);//距離工具
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
ReleaseCapture();
EndWaitCursor();
m_ctrlMapX.SetMousePointer(0);
/*
//下面代碼綁定數(shù)據(jù)
try {
long Total_Layers= m_ctrlMapX.GetLayers().GetCount();
for (int i=0;i<Total_Layers;i++)
{
CMapXLayer layer = m_ctrlMapX.GetLayers().Item(i+1);
VARIANT vtLayer;
vtLayer.vt = VT_DISPATCH;
vtLayer.pdispVal = layer.m_lpDispatch;
CString na=layer.GetName();
CMapXDataset dataSet = m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vtLayer, na);
}
} // end-of-try
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
*/
return 0;
}
void CMapGisView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if ( cx != 0 && cy != 0 && m_bMapData )
{
try
{
m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
}
void CMapGisView::OnFileOpen()
{
static char BASED_CODE szSplitFilter[] = _T("地圖文件(*.gst)|*.gst||");
CString filter;
filter = szSplitFilter;
CFileDialog dlg(TRUE,
NULL,
NULL,
OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT |
OFN_FILEMUSTEXIST,
filter,
0);
//set source path
if (dlg.DoModal() == IDOK) {
CString m_path = dlg.GetPathName();
CString m_filename = dlg.GetFileName();
// CGisMapDoc * doc=new CGisMapDoc(m_path);
// CFrameWnd* wnd=pGisDocTemplate->CreateNewFrame(doc,NULL);
// if (wnd)
// pGisDocTemplate->InitialUpdateFrame(wnd,doc,TRUE);
}
}
void CMapGisView::OnMapToolDistance()
{
m_ctrlMapX.SetCurrentTool(MYTOOL_DISTANCE);
}
void CMapGisView::OnPolyToolUsedMap(short ToolNum, long Flags, LPDISPATCH Points, BOOL bShift, BOOL bCtrl, BOOL FAR* EnableDefault)
{
// 計(jì)算距離
if (ToolNum == MYTOOL_DISTANCE) {
CMapXPoints pts;
long n;
long i;
try {
pts.AttachDispatch(Points, FALSE); // don't auto release
double dDistanceTot = 0.0;
n = pts.GetCount();
for (i=1; i<n; i++) {
CMapXPoint pt1 = pts.Item(i);
CMapXPoint pt2 = pts.Item(i+1);
double d = m_ctrlMapX.Distance(pt1.GetX(), pt1.GetY(), pt2.GetX(), pt2.GetY());
dDistanceTot += d;
}
CString str;
str.Format("總距離為: %f 公里", dDistanceTot);
((CMainFrame *)AfxGetMainWnd())->m_wndStatusBar.SetPaneText(0, str);
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
}
void CMapGisView::OnMapToolPan()
{
m_ctrlMapX.SetCurrentTool(miPanTool);
}
void CMapGisView::OnMapToolRadiusselect()
{
m_ctrlMapX.SetCurrentTool(miRadiusSelectTool);
}
void CMapGisView::OnMapToolZoomin()
{
m_ctrlMapX.SetCurrentTool(miZoomInTool);
}
void CMapGisView::OnUpdateMapToolZoomin(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool()==miZoomInTool);
}
void CMapGisView::OnMapToolZoomout()
{
m_ctrlMapX.SetCurrentTool(miZoomOutTool);
}
void CMapGisView::OnViewLayercontrol()
{
//圖層控制
try {
COptionalVariant vHelpFile, vHelpID;
m_ctrlMapX.GetLayers().LayersDlg(vHelpFile, vHelpID);
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
void CMapGisView::OnMapToolRectangleselect()
{
m_ctrlMapX.SetCurrentTool(miRectSelectTool);
}
void CMapGisView::OnMapToolSelect()
{
m_ctrlMapX.SetCurrentTool(miSelectTool);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -