📄 mo20view.cpp
字号:
// MO20View.cpp : implementation of the CMO20View class
//
#include "stdafx.h"
#include "MO20.h"
#include "MO20Doc.h"
#include "MO20View.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMO20View
IMPLEMENT_DYNCREATE(CMO20View, CFormView)
BEGIN_MESSAGE_MAP(CMO20View, CFormView)
//{{AFX_MSG_MAP(CMO20View)
ON_COMMAND(ID_BUTTON32771, OnButton32771)
ON_COMMAND(ID_BUTTON32772, OnButton32772)
ON_COMMAND(ID_BUTTON32773, OnButton32773)
ON_COMMAND(ID_BUTTON32774, OnButton32774)
ON_COMMAND(IDC_EVENTCHECK, OnLabel)
ON_WM_SIZE()
ON_COMMAND(ID_BUTTON32776, OnButton32776)
ON_COMMAND(ID_BN_DOWN, OnBnDown)
ON_COMMAND(ID_BN_LEFT, OnBnLeft)
ON_COMMAND(ID_BN_RIGHT, OnBnRight)
ON_COMMAND(ID_BN_UP, OnBnUp)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(IDC_SEARCH, OnMapSearch)
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMO20View construction/destruction
CMO20View::CMO20View()
: CFormView(CMO20View::IDD)
{
//{{AFX_DATA_INIT(CMO20View)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CMO20View::~CMO20View()
{
}
void CMO20View::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMO20View)
DDX_Control(pDX, IDC_MAP1, m_map);
DDX_Control(pDX, IDC_MAP2, m_map1);
//}}AFX_DATA_MAP
}
BOOL CMO20View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CMO20View::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
char szPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szPath);
CString currentDir(szPath);
CString dataPath(TEXT("..\\USA"));
// Add data to the map.
/*AddLayer(m_map, dataPath + TEXT("\\states.shp"), moLimeGreen);
AddLayer(m_map, dataPath + TEXT("\\ushigh.shp"), moMagenta);
AddLayer(m_map, dataPath + TEXT("\\counties.shp"), moPaleYellow);
AddLayer(m_map, dataPath + TEXT("\\capitals.shp"), moRed);*/
CDataDir dataDir;
// Try to open the shape file
try
{
//AddLayer(m_map, TEXT(dataDir.GetPath() + "..\\USA\\states.shp"), moLimeGreen);
AddLayer(m_map, dataPath + TEXT("\\states.shp"), moLimeGreen);
AddLayer(m_map, dataPath + TEXT("\\ushigh.shp"), moMagenta);
AddLayer(m_map, dataPath + TEXT("\\counties.shp"), moPaleYellow);
AddLayer(m_map, dataPath + TEXT("\\capitals.shp"), moRed);
AddLayer(m_map1, TEXT(dataDir.GetPath() + "..\\USA\\states.shp"), moLightYellow);
}
catch (...)
{
::MessageBox(this->GetSafeHwnd(), _T("Default shape file not found."), _T("MoveMap"), MB_ICONEXCLAMATION);
}
CMoLayers layers(m_map.GetLayers());
CMoMapLayer counties(layers.Item(COleVariant(TEXT("Counties"))));
CMoClassBreaksRenderer cbRenderer; // Create from scratch
cbRenderer.CreateDispatch(TEXT("MapObjects2.ClassBreaksRenderer"));
cbRenderer.SetField(TEXT("MOBILEHOME"));
CMoRecordset recs(counties.GetRecords());
CMoStatistics stats(recs.CalculateStatistics(TEXT("MOBILEHOME")));
double breakVal = stats.GetMean() - (stats.GetStdDev() * 3.0);
double min = stats.GetMin(); double max = stats.GetMax();
for (int i = 0; i < 7; i++) {
if (min <= breakVal && breakVal <= max) {
int breakCount = cbRenderer.GetBreakCount();
cbRenderer.SetBreakCount(breakCount + 1);
cbRenderer.SetBreak(breakCount, breakVal);
}
breakVal = breakVal + stats.GetStdDev();
}
cbRenderer.RampColors(moCyan, moBlue);
counties.SetRenderer(cbRenderer);
// Append code after the code for the Counties renderer
/*// Set up states renderer
CMoMapLayer states(layers.Item(COleVariant(TEXT("States"))));
CMoDotDensityRenderer ddRenderer; // Create from scratch
ddRenderer.CreateDispatch(TEXT("MapObjects2.DotDensityRenderer"));
ddRenderer.SetField(TEXT("NO_FARMS87"));
recs = states.GetRecords();
stats = recs.CalculateStatistics(TEXT("NO_FARMS87"));
ddRenderer.SetDotValue(stats.GetMax() / 100.0);
states.SetRenderer(ddRenderer);
//对sates添加注记
CMoLayers layers1(m_map.GetLayers());
CMoMapLayer states1(layers1.Item(COleVariant(TEXT("states"))));
CMoLabelRenderer labRenderer;
labRenderer.CreateDispatch(TEXT("MapObjects2.LabelRenderer"));
labRenderer.SetField(TEXT("state_NAME"));
states1.SetRenderer(labRenderer);
//对capitals添加注记
CMoMapLayer capitals(layers.Item(COleVariant(TEXT("capitals"))));
CMoLabelPlacer labelPlacer;
labelPlacer.CreateDispatch(TEXT("MapObjects2.labelPlacer"));
labelPlacer.SetField(TEXT("city_NAME"));
labelPlacer.SetPlaceOn(false);
labelPlacer.SetPlaceAbove(false);
labelPlacer.SetPlaceBelow(true);
labelPlacer.SetDrawBackground(true);//是否显示注记对象要素
capitals.SetRenderer(labelPlacer);*/
// Build a search expression from the text in IDC_SEARCHEDIT
}
/////////////////////////////////////////////////////////////////////////////
// CMO20View printing
BOOL CMO20View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMO20View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMO20View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CMO20View::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
CRect frame(0, 0, ::GetDeviceCaps(pDC->m_hAttribDC, HORZRES),
::GetDeviceCaps(pDC->m_hAttribDC, VERTRES));
FrameMap(m_map, pDC, frame);
}
/////////////////////////////////////////////////////////////////////////////
// CMO20View diagnostics
#ifdef _DEBUG
void CMO20View::AssertValid() const
{
CFormView::AssertValid();
}
void CMO20View::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CMO20Doc* CMO20View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMO20Doc)));
return (CMO20Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMO20View message handlers
void CMO20View::OnButton32771()
{
// TODO: Add your command handler code here
CMoRectangle r(m_map.GetFullExtent());
m_map.SetExtent(r);
}
void CMO20View::OnButton32772()
{
// TODO: Add your command handler code here
f1=0;
f2=1;
f3=0;
f4=0;
m_map.SetMousePointer(54);
}
void CMO20View::OnButton32773()
{
// TODO: Add your command handler code here
f1=0;
f2=0;
f3=1;
f4=0;
m_map.SetMousePointer(51);
}
void CMO20View::OnButton32774()
{
// TODO: Add your command handler code here
f1=0;
f2=0;
f3=0;
f4=1;
m_map.SetMousePointer(52);
}
BEGIN_EVENTSINK_MAP(CMO20View, CFormView)
//{{AFX_EVENTSINK_MAP(CMO20View)
ON_EVENT(CMO20View, IDC_MAP1, -605 /* MouseDown */, OnMouseDownMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CMO20View, IDC_MAP1, 2 /* BeforeLayerDraw */, OnBeforeLayerDrawMap1, VTS_I2 VTS_I4)
ON_EVENT(CMO20View, IDC_MAP1, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap1, VTS_I4)
ON_EVENT(CMO20View, IDC_MAP2, -605 /* MouseDown */, OnMouseDownMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CMO20View, IDC_MAP2, -606 /* MouseMove */, OnMouseMoveMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CMO20View::OnMouseDownMap1(short Button, short Shift, long X, long Y)
{
// TODO: Add your control notification handler code here
if(f2)
{
m_map.Pan();
}
if(f3)
{
CMoRectangle r(m_map.TrackRectangle());
if (LPDISPATCH(r))
m_map.SetExtent(r);
}
if(f4)
{CMoRectangle r(m_map.GetExtent());
r.ScaleRectangle(1.1);
m_map.SetExtent(r);
}
if(f5)
{
// search for a highway within a N pixel tolerance 设置容差
const double tolerance = m_map.ToMapDistance((float)10);
CMoLayers layers(m_map.GetLayers());
CMoMapLayer highways(layers.Item(COleVariant(TEXT("USHigh"))));
CMoPoint mapPt(m_map.ToMapPoint((float)X, (float)Y));
CMoRecordset selectedHighways(highways.SearchByDistance(mapPt,tolerance, TEXT("")));
if (selectedHighways.GetEof())
::MessageBeep(MB_ICONQUESTION); // no highways found
else {
CMoMapLayer counties(layers.Item(COleVariant(TEXT("Counties"))));
m_selection = counties.SearchShape(selectedHighways,
moEdgeTouchOrAreaIntersect, TEXT(""));
// m_map.Refresh(); // Redraw map
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
CMoTrackingLayer m_trackLayer(m_map.GetTrackingLayer());
m_trackLayer.Refresh(true,va);
m_map.SetMousePointer(59);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -