分享

ZoomIn插件制作(VS2010 arcObject10.2 )全网应该是唯一的

 tology 2019-08-08

这个过程就是制作ArcMap插件的过程,说实话挺恶心的,为什么不用VS2013呢 ? 主要是环境有问题 。

Go! Let‘s do it!

一、 新建ATL项目 (项目命名Demo即可)

第二步 直接点完成、无需修改当中项:

第三步 右键当前项目Demo 添加类

选择“ATL简单对象”

点击添加 而后命名ZoomIn 简洁明白大方:

然后在接口处选择“自定义” 主要是为了后面实现ICommand接口

完成即可;

而后对Demo.idl 部分修改:

接下来是引入esri对象库文件(在stdafx.h当中引入):

  1. #pragma warning(push)
  2. #pragma warning(disable : 4192)
  3. //disables warning: automatically excluding 'name' while importing type library 'library'
  4. //import esriSystem.olb
  5. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriSystem.olb' raw_interfaces_only raw_native_types no_namespace named_guids exclude('OLE_COLOR', 'OLE_HANDLE', 'VARTYPE', 'XMLSerializer') rename('min','esrimin') rename('max','esrimax') rename('GetObject','esriGetObject') rename('GetJob','esriGetJob')
  6. //import esriSystemUI.olb
  7. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriSystemUI.olb' raw_interfaces_only raw_native_types no_namespace named_guids exclude('OLE_HANDLE', 'OLE_COLOR')
  8. //import esriGeometry.olb
  9. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriGeometry.olb' raw_interfaces_only raw_native_types no_namespace named_guids exclude('OLE_HANDLE', 'OLE_COLOR', 'ISegment')
  10. //import esriDisplay.olb
  11. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriDisplay.olb' raw_interfaces_only raw_native_types no_namespace named_guids exclude('OLE_HANDLE', 'OLE_COLOR') rename('RGB','esriRGB') rename('DrawText','esriDrawText') rename('ResetDC','esriResetDC') rename('CMYK','esriCMYK')
  12. //import esriGeoDatabase.olb
  13. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriGeoDatabase.olb' raw_interfaces_only raw_native_types no_namespace named_guids rename('GetMessage','esriGetMessage')
  14. //import esriCarto.olb
  15. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriCarto.olb' raw_interfaces_only raw_native_types no_namespace named_guids exclude('UINT_PTR') rename('PostMessage','esriPostMessage')
  16. //import esriControls.olb
  17. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriControls.olb' raw_interfaces_only raw_native_types no_namespace named_guids rename('DrawText','esriDrawText')
  18. #import 'C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriSystemUI.olb' raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search
  19. #import 'C:\Program Files (x86)\ArcGIS\Engine10.2\com\esriSystemUI.olb' raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search
  20. #pragma warning(pop)

然后转到类视图 右键CZoomIn ------> 添加 -----> 实现接口 (ICommand接口)

完成即可;

接下来就是对这些方法进行实现

转到ZoomIn.h 删除原因的方法块:

转到ZoomIn.cpp去实现这些方法

  1. // ZoomIn.cpp : CZoomIn 的实现
  2. #include 'stdafx.h'
  3. #include 'ZoomIn.h'
  4. // CZoomIn
  5. IHookHelperPtr m_ipHookHelper;
  6. STDMETHODIMP CZoomIn::get_Enabled(VARIANT_BOOL *Enabled)
  7. {
  8. if (Enabled == NULL)
  9. return E_POINTER;
  10. *Enabled = VARIANT_TRUE; // Enable the tool always
  11. return S_OK;
  12. }
  13. CZoomIn::CZoomIn()
  14. {
  15. m_hBitmap = ::LoadBitmap(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDB_BITMAP1));
  16. }
  17. STDMETHODIMP CZoomIn::get_Name(BSTR *Name)
  18. {
  19. if (Name == NULL)
  20. return E_POINTER;
  21. *Name = ::SysAllocString(L'ZoomInDu');
  22. return S_OK;
  23. }
  24. STDMETHODIMP CZoomIn::get_Caption(BSTR *Caption)
  25. {
  26. if (Caption == NULL)
  27. return E_POINTER;
  28. *Caption = ::SysAllocString(L'ZoomIn*Du');
  29. return S_OK;
  30. }
  31. STDMETHODIMP CZoomIn::get_Category(BSTR *Category)
  32. {
  33. if (Category == NULL)
  34. return E_POINTER;
  35. *Category = ::SysAllocString(L'GisTools');
  36. return S_OK;
  37. }
  38. STDMETHODIMP CZoomIn::get_Bitmap(OLE_HANDLE *Bitmap)
  39. {
  40. if (Bitmap == NULL)
  41. return E_POINTER;
  42. *Bitmap = (OLE_HANDLE)m_hBitmap;
  43. return S_OK;
  44. }
  45. STDMETHODIMP CZoomIn::OnCreate(IDispatch *hook)
  46. {
  47. m_ipHookHelper.CreateInstance(CLSID_HookHelper);
  48. HRESULT hr = m_ipHookHelper->putref_Hook(hook);
  49. return hr;
  50. }
  51. STDMETHODIMP CZoomIn::OnClick()
  52. {
  53. // HRESULT checking omitted for clarity
  54. IActiveViewPtr ipActiveView;
  55. m_ipHookHelper->get_ActiveView(&ipActiveView);
  56. IEnvelopePtr ipEnv;
  57. ipActiveView->get_Extent(&ipEnv);
  58. ipEnv->Expand(0.5, 0.5, VARIANT_TRUE);
  59. ipActiveView->put_Extent(ipEnv);
  60. ipActiveView->Refresh();
  61. return S_OK;
  62. }

最后去注册 在ZoomIn.h当中

然后设置启动程序  在项目右键属性 调试 选择ArcMap.EXE作为启动程序即可。

而后启动调试

自定义----》 从文件添加 选择dll即可 

现在ok了~ 可以添加工具在菜单栏即可使用。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多