EyeDlg.cpp
上传用户:qinfarui
上传日期:2022-08-10
资源大小:362k
文件大小:3k
源码类别:

GIS编程

开发平台:

Visual C++

  1. // EyeDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MoLecture.h"
  5. #include "EyeDlg.h"
  6. #include "MoLectureView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CEyeDlg dialog
  14. CEyeDlg::CEyeDlg(CWnd* pParent /*=NULL*/)
  15. : CDialog(CEyeDlg::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CEyeDlg)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. }
  21. void CEyeDlg::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialog::DoDataExchange(pDX);
  24. //{{AFX_DATA_MAP(CEyeDlg)
  25. DDX_Control(pDX, IDC_MAP1, m_EyeMap);
  26. //}}AFX_DATA_MAP
  27. }
  28. BEGIN_MESSAGE_MAP(CEyeDlg, CDialog)
  29. //{{AFX_MSG_MAP(CEyeDlg)
  30. // NOTE: the ClassWizard will add message map macros here
  31. //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CEyeDlg message handlers
  35. BEGIN_EVENTSINK_MAP(CEyeDlg, CDialog)
  36.     //{{AFX_EVENTSINK_MAP(CEyeDlg)
  37. ON_EVENT(CEyeDlg, IDC_MAP1, 5 /* BeforeTrackingLayerDraw */, OnBeforeTrackingLayerDrawMap1, VTS_I4)
  38. ON_EVENT(CEyeDlg, IDC_MAP1, -605 /* MouseDown */, OnMouseDownMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
  39. //}}AFX_EVENTSINK_MAP
  40. END_EVENTSINK_MAP()
  41. //画矩形范围框
  42. void CEyeDlg::OnBeforeTrackingLayerDrawMap1(long hDC) 
  43. {
  44. // TODO: Add your control notification handler code here
  45. CFrameWnd *pFrame=(CFrameWnd *)(AfxGetApp()->m_pMainWnd);
  46. CMoLectureView *view=(CMoLectureView *)pFrame->GetActiveView();
  47. CMoRectangle mExtent =view->m_Map.GetExtent();
  48. CMoSymbol lSym;
  49. if (!lSym.CreateDispatch("MapObjects2.Symbol"))
  50. return;
  51. lSym.SetColor(moRed);
  52. lSym.SetSymbolType(moLineSymbol);
  53. lSym.SetSize(3);
  54. CMoPoint p;
  55. if (!p.CreateDispatch("MapObjects2.Point"))
  56. return;
  57. CMoPoints pts;
  58. if (!pts.CreateDispatch("MapObjects2.Points"))
  59. return;
  60. CMoLine l;
  61. if (!l.CreateDispatch("MapObjects2.Line"))
  62. return;
  63. p.SetX(mExtent.GetLeft());
  64. p.SetY(mExtent.GetBottom());
  65. pts.Add(p);
  66. p.SetX(mExtent.GetLeft());
  67. p.SetY(mExtent.GetTop());
  68. pts.Add(p);
  69.   p.SetX(mExtent.GetRight());
  70. p.SetY(mExtent.GetTop());
  71. pts.Add(p);
  72.   p.SetX(mExtent.GetRight());
  73. p.SetY(mExtent.GetBottom());
  74. pts.Add(p);
  75.    p.SetX(mExtent.GetLeft());
  76. p.SetY(mExtent.GetBottom());
  77. pts.Add(p);
  78. l.GetParts().Add(pts);
  79. m_EyeMap.DrawShape(l,lSym);
  80. }
  81. //鹰眼视图控制主视图
  82. void CEyeDlg::OnMouseDownMap1(short Button, short Shift, long X, long Y) 
  83. {
  84. // TODO: Add your control notification handler code here
  85. CFrameWnd *pFrame=(CFrameWnd *)(AfxGetApp()->m_pMainWnd);
  86. CMoLectureView *view=(CMoLectureView *)pFrame->GetActiveView();
  87. //得到主视图显示范围
  88. CMoRectangle mExtent =view->m_Map.GetExtent();
  89.     //得到鹰眼视图当前点坐标
  90. CMoPoint pt = ToMapPoint(m_EyeMap,X,Y);
  91. CMoPoint c = mExtent.GetCenter();
  92. //将范围偏移
  93. mExtent.Offset(pt.GetX() - c.GetX(), pt.GetY() - c.GetY());
  94. //通知主视图范围变了
  95. view->m_Map.SetExtent(mExtent);
  96. //重新绘制鹰眼视图
  97. m_EyeMap.Refresh();
  98. }