📄 firstmapview.cpp
字号:
m_list.SetCheck(index_seled);
LONG lstyle;
lstyle = GetWindowLong(m_list.m_hWnd,GWL_STYLE);
lstyle |= LVS_AUTOARRANGE;
SetWindowLong(m_list.m_hWnd,GWL_STYLE,lstyle);
*/
// 使得m_nIndex-1位置处项目高亮显示并获得焦点
UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
m_list.SetItemState(index_seled, flag, flag);
}
void CFirstMapView::OnButtonDown()
{
// TODO: Add your command handler code here
if (this->index_seled == -1) //如果没有选择就返回
{
MessageBox("请选择一个图层再下移!","提示",MB_ICONINFORMATION);
return;
}
if (index_seled == m_list.GetItemCount()-1) // 判断所选项是否位于行首
{
MessageBox("已经位于最底层!","提示",MB_ICONINFORMATION);
return;
}
this->layers.MoveTo(index_seled,index_seled+1);
this->Layers.MoveTo(index_seled,index_seled+1);
m_map.Refresh();
m_map2.Refresh();
CString str;
int i = m_list.GetItemCount()-index_seled-1;
str = PathName[i-1];
PathName[i-1] = PathName[i];
PathName[i] =str;
int j =index-1;
m_list.DeleteAllItems();
for(i=0;j>=0;i++)
{
lvitem.iItem = i;
m_list.InsertItem(&lvitem);
m_list.SetItemState (i,0x2000, LVIS_STATEIMAGEMASK);
m_list.SetItemText(i,0,PathName[j]);
j--;
}
index_seled++;
// 使得m_nIndex-1位置处项目高亮显示并获得焦点
UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
m_list.SetItemState(index_seled, flag, flag);
}
void CFirstMapView::OnUpTop()
{
// TODO: Add your command handler code here
if (this->index_seled == -1) //如果没有选择就返回
{
MessageBox("请选择一个图层!","提示",MB_ICONINFORMATION);
return;
}
if (index_seled == 0) // 判断所选项是否位于行首
{
MessageBox("已经位于最上层!","提示",MB_ICONINFORMATION);
return;
}
this->layers.MoveToTop(index_seled);
this->Layers.MoveToTop(index_seled);
m_map.Refresh();
m_map2.Refresh();
int num = m_list.GetItemCount();
CString str;
int i = num-index_seled-1;
str = PathName[i];
for(int j = i ; j<num-1;j++)
{
PathName[j] = PathName[j+1];
}
PathName[num-1] = str;
j =index-1;
m_list.DeleteAllItems();
for(i=0;j>=0;i++)
{
lvitem.iItem = i;
m_list.InsertItem(&lvitem);
m_list.SetItemState (i,0x2000, LVIS_STATEIMAGEMASK);
m_list.SetItemText(i,0,PathName[j]);
j--;
}
index_seled=0;
// 使得m_nIndex-1位置处项目高亮显示并获得焦点
UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
m_list.SetItemState(index_seled, flag, flag);
}
void CFirstMapView::OnDownBottom()
{
// TODO: Add your command handler code here
if (this->index_seled == -1) //如果没有选择就返回
{
MessageBox("请选择一个图层!","提示",MB_ICONINFORMATION);
return;
}
if (index_seled == m_list.GetItemCount()-1) // 判断所选项是否位于行首
{
MessageBox("已经位于最上层!","提示",MB_ICONINFORMATION);
return;
}
this->layers.MoveToBottom(index_seled);
this->Layers.MoveToBottom(index_seled);
m_map.Refresh();
m_map2.Refresh();
int num = m_list.GetItemCount();
CString str;
int i = num-index_seled-1;
str = PathName[i];
for(int j = i ; j>0;j--)
{
PathName[j] = PathName[j-1];
}
PathName[0] = str;
j =index-1;
m_list.DeleteAllItems();
for(i=0;j>=0;i++)
{
lvitem.iItem = i;
m_list.InsertItem(&lvitem);
m_list.SetItemState (i,0x2000, LVIS_STATEIMAGEMASK);
m_list.SetItemText(i,0,PathName[j]);
j--;
}
index_seled=0;
// 使得m_nIndex-1位置处项目高亮显示并获得焦点
UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
m_list.SetItemState(index_seled, flag, flag);
}
void CFirstMapView::OnScaleWind()
{
// TODO: Add your command handler code here
if(dlg.DoModal()==IDOK)
{
double scale;
scale = 1.0/dlg.m_scale;
SetMapScale(m_map, dlg.m_scale);
}
}
void CFirstMapView::SetMapScale(CMoMap &map, double scale)
{
CDC* pDC = map.GetDC();
double MiterPointNum = (1000.0/25.4)*GetDeviceCaps(pDC->m_hDC,LOGPIXELSX);
//MiterPointNum为屏幕上一米有多少个象素点
//GetDeviceCaps(pDC->m_hDC,LOGPIXELSX) 返回屏幕横轴方向上每英寸长度包含的象素个数
// LPRECT lpRect;
// m_map.GetClientRect(lpRect);
// CRect r(lpRect);
double widthX = (this->width-178)*scale/MiterPointNum;
double widthY = this->height*scale/MiterPointNum;
CMoRectangle moRect(map.GetExtent());
CMoPoint pt(moRect.GetCenter());
CMoRectangle moRectNew;
if(!moRectNew.CreateDispatch(TEXT("MapObjects2.Rectangle")))
return;
moRectNew.SetLeft(pt.GetX()-widthX/2.0);
moRectNew.SetRight(pt.GetX()+widthX/2.0);
moRectNew.SetTop(pt.GetY()+widthY/2.0);
moRectNew.SetBottom(pt.GetY()-widthY/2.0);
map.SetExtent(moRectNew);
map.Refresh();
map.ReleaseDC(pDC);
}
void CFirstMapView::OnQueryPoint()
{
// TODO: Add your command handler code here
if(m_nCurTool == ID_QUERY_POINT)
{
m_nCurTool = ID_NOMAL;
this->m_CurrentOperation = Null_Query ;
}
}
void CFirstMapView::OnQueryEllipse()
{
// TODO: Add your command handler code here
this->m_CurrentOperation = Query_Ellipse;
}
void CFirstMapView::OnQueryPolygon()
{
// TODO: Add your command handler code here
this->m_CurrentOperation = Query_Polygon;
}
void CFirstMapView::OnQueryRectangle()
{
// TODO: Add your command handler code here
this->m_CurrentOperation = Query_Rectangle;
}
void CFirstMapView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
if(!m_firstStart)
{
CMoLayers m_Layers;
if(m_Layers.CreateDispatch(TEXT("MapObjects2.MoLayers")))
return;
m_Layers = m_map2.GetLayers();
int layersCount = m_map2.GetLayers().GetCount();
for(int i=0;i<layersCount;i++)
m_Layers.Remove(0);
OnSetNavigationViewMapLayer();
}
}
void CFirstMapView::OnMouseDownMap2(short Button, short Shift, long X, long Y)
{
// TODO: Add your control notification handler code here
CMoPoint pt(m_map2.ToMapPoint((float)X,(float)Y));
m_startPointX = pt.GetX();
m_startPointY = pt.GetY();
m_DragRectFlag = FALSE;
if(m_map.GetExtent().IsPointIn(pt))
{
//清除原始范围矩形
this->m_RefreshOriginalRect = TRUE;
OnClearOriginalRect();
m_RefreshOriginalRect = FALSE;
float xc,yc;
CMoRectangle rc(m_map.GetExtent());
CMoPoint pt1,pt2;
pt1.CreateDispatch(_T("MapObjects2.Point"));
pt2.CreateDispatch(_T("MapObjects2.Point"));
this->m_hWnd = (HWND)m_map2.GetHWnd();
this->m_hDC = ::GetDC(m_hWnd);
::SetROP2(m_hDC,R2_NOTXORPEN);
pt1.SetX(rc.GetLeft());
pt1.SetY(rc.GetTop());
m_map2.FromMapPoint(pt1,&xc,&yc);
m_xMin = (int)xc;
m_yMin = (int)yc;
pt2.SetX(rc.GetRight());
pt2.SetY(rc.GetBottom());
m_map2.FromMapPoint(pt2,&xc,&yc);
m_xMax = (int)xc;
m_yMax = (int)yc;
::Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
m_xPrev = X;
m_yPrev = Y;
pt1.ReleaseDispatch();
pt2.ReleaseDispatch();
this->m_DragRectFlag = TRUE;
}
}
void CFirstMapView::OnMouseMoveMap2(short Button, short Shift, long X, long Y)
{
// TODO: Add your control notification handler code here
//当左键按下时
if(Button == 1 && this->m_DragRectFlag)
{
int xNext = X;
int yNext = Y;
::Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
m_xMin = m_xMin + (xNext - m_xPrev);
m_yMin = m_yMin + (yNext - m_yPrev);
m_xMax = m_xMax + (xNext - m_xPrev);
m_yMax = m_yMax + (yNext - m_yPrev);
::Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
m_xPrev = xNext;
m_yPrev = yNext;
}
}
void CFirstMapView::OnMouseUpMap2(short Button, short Shift, long X, long Y)
{
// TODO: Add your control notification handler code here
if(m_DragRectFlag)
{
CMoPoint pt(m_map2.ToMapPoint((float)X,(float)Y)); //定义终点
float xc,yc;
CMoRectangle rc;
rc.CreateDispatch("MapObjects2.Rectangle");
// BOOL b = ::Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
xc = (float)m_xMin;
yc = (float)m_yMin;
CMoPoint pt1(m_map2.ToMapPoint(xc,yc));
rc.SetLeft(m_map.GetExtent().GetLeft()-this->m_startPointX+pt.GetX());
rc.SetTop(m_map.GetExtent().GetTop()-m_startPointY+pt.GetY());
xc = (float)m_xMax;
yc = (float)m_yMax;
CMoPoint pt2(m_map2.ToMapPoint(xc,yc));
rc.SetRight(m_map.GetExtent().GetRight()-this->m_startPointX+pt.GetX());
rc.SetBottom(m_map.GetExtent().GetBottom()-m_startPointY+pt.GetY());
m_map.SetExtent(rc);
rc.ReleaseDispatch();
// this->OnRefreshNavigationWindow();
::ReleaseDC(m_hWnd,m_hDC);
}
}
void CFirstMapView::OnAfterTrackingLayerDrawMap2(long hDC)
{
// TODO: Add your control notification handler code here
CMoSymbol sym;
if(sym.CreateDispatch("MapObjects2.Symbol"))
return;
sym.SetSize(2);
sym.SetStyle(1);
sym.SetOutlineColor(0xFF00);
CMoRectangle rc;
rc.CreateDispatch("MapObjects2.Rectangle");
if(!m_RefreshOriginalRect)
{
rc = m_map.GetExtent();
m_map2.DrawShape(rc,sym);
}
else
{
rc = m_map2.GetExtent();
m_map2.DrawShape(rc,sym);
}
rc.ReleaseDispatch();
sym.ReleaseDispatch();
}
void CFirstMapView::OnClearOriginalRect()
{
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
CMoTrackingLayer tLayer(m_map2.GetTrackingLayer());
tLayer.Refresh(true,va);
}
void CFirstMapView::OnRefreshNavigationWindow()
{
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
CMoTrackingLayer tLayer(m_map2.GetTrackingLayer());
tLayer.Refresh(true,va);
this->m_RefreshOriginalRect = TRUE;
OnClearOriginalRect();
m_RefreshOriginalRect = FALSE;
float xc,yc;
CMoRectangle rc(m_map.GetExtent());
CMoPoint pt1,pt2;
pt1.CreateDispatch(_T("MapObjects2.Point"));
pt2.CreateDispatch(_T("MapObjects2.Point"));
this->m_hWnd = (HWND)m_map2.GetHWnd();
this->m_hDC = ::GetDC(m_hWnd);
::SetROP2(m_hDC,R2_NOTXORPEN);
pt1.SetX(rc.GetLeft());
pt1.SetY(rc.GetTop());
m_map2.FromMapPoint(pt1,&xc,&yc);
m_xMin = (int)xc;
m_yMin = (int)yc;
pt2.SetX(rc.GetRight());
pt2.SetY(rc.GetBottom());
m_map2.FromMapPoint(pt2,&xc,&yc);
m_xMax = (int)xc;
m_yMax = (int)yc;
::Rectangle(m_hDC,m_xMin,m_yMin,m_xMax,m_yMax);
pt1.ReleaseDispatch();
pt2.ReleaseDispatch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -