Engine的MapControl控件在MFC下非对话框中的使用.docx_第1页
Engine的MapControl控件在MFC下非对话框中的使用.docx_第2页
Engine的MapControl控件在MFC下非对话框中的使用.docx_第3页
Engine的MapControl控件在MFC下非对话框中的使用.docx_第4页
Engine的MapControl控件在MFC下非对话框中的使用.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Engine的MapControl控件在MFC下View中的使用王红亮Esri中国(北京)有限公司2010/01/271. 引言ArcGIS Engine的控件,如MapControl,在MFC框架下非Dialog模板,如Document/View/Frame结构下能不能使用,如何使用。按照我们以往的经验,此时的MapControl应该作为子窗口,继承自CWnd,并实现Create()成员函数,便能达到运行时创建的要求。那么我们要解决的问题也就明确了:创建一个继承自CWnd类,并对MapCotrol进行包装。本示例开发环境选用Visual Sudio 2008(Version 9.0.30729.1 SP,Visual Sudio 2010也有对应的工程和解决方案),语言采用C+,MFC技术;ArcEngine 10.0产品;Win7(64bit)操作系统。程序运行的效果如下:2. CMapControl窗口类的实现/*MapControl.h*/#pragma once/ ArcGIS Engine MapControl的封装类/ 作者:王红亮/单位:Esri中国(北京)有限公司/日期:/01/26/说明:本程序可自由引用、转载、发布,但请保留作者信息/ CMapControl wrapper classclass CMapControl : public CWndprotected:DECLARE_DYNCREATE(CMapControl)public:CLSID const& GetClsid()static CLSID const clsid= 0xC552EA94, 0x6FBB, 0x11d5, 0xA9, 0xC1, 0x0, 0x10, 0x4B, 0xB6, 0xFC, 0x1C ;return clsid;virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,BSTR bstrLicKey = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,pPersist, bStorage, bstrLicKey); / default bAddRef is false because you dont need to addref/ when passing result to Feature.Attach();LPDISPATCH GetDispatch(BOOL bAddRef=FALSE);/ Attributespublic:/ Operationspublic:;/*MapControl.cpp*/#include stdafx.h#include MapControl.h/ CMapControl wrapper classIMPLEMENT_DYNCREATE(CMapControl, CWnd)LPDISPATCH CMapControl:GetDispatch(BOOL bAddRef)LPUNKNOWN pUnk = GetControlUnknown();LPDISPATCH pDispatch;if (pUnk != NULL) &SUCCEEDED(pUnk-QueryInterface(IID_IDispatch, (LPVOID*)&pDispatch) ASSERT(pDispatch != NULL);if (!bAddRef) pDispatch-Release();return pDispatch;return NULL;/ properties/operations说明:CMapControl窗口类实现的关键在于利用CreateControl(REFCLSID clsid, LPCTSTR pszWindowName,. )这个MFC中CWnd类的创建ActiveX控件的方法,其中参数clsid指ActiveX控件的GUID,每个ActiveX控件都有一个GUID。MFC对GUID数据结构作了如下的定义:typedef struct _GUID unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4 8 ; GUID;,通过OLE/COM Object Viewer(Visual Studio开发环境提供的工具),中的Type Libraries分支中的Esri Controls 10.0项内的coclass MapControl对象,很容易得到MapControl的GUID,C552EA94-6FBB-11D5-A9C1-00104BB6FC1C,于是我们把此ID依次填入GUID的数据结构中,便有了代码中的,static CLSID const clsid= 0xC552EA94, 0x6FBB, 0x11d5, 0xA9, 0xC1, 0x0, 0x10, 0x4B, 0xB6, 0xFC, 0x1C ;奥,原来是这样!3. CMapControl窗口类的使用在主视图类中,加入CMapControl类型的成员,及OnCreate()和OnSize()标准窗口消息的相应函数,如下:/AEViewTestView.h#include MapControl.hclass CAEViewTestView : public CView / 属性public:CAEViewTestDoc* GetDocument() const;CMapControl m_wndMap;/ 生成的消息映射函数protected:afx_msg void OnFilePrintPreview();afx_msg void OnRButtonUp(UINT nFlags, CPoint point);afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);afx_msg int OnCreate(LPCREATESTRUCT lpcs);afx_msg void OnSize(UINT nType, int cx, int cy);DECLARE_MESSAGE_MAP();/AEViewTestView.cppBEGIN_MESSAGE_MAP(CAEViewTestView, CView)/ 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CAEViewTestView:OnFilePrintPreview)ON_WM_CREATE()ON_WM_SIZE()END_MESSAGE_MAP()/ CAEViewTestView 消息处理程序int CAEViewTestView:OnCreate(LPCREATESTRUCT lpcs)if(CView:OnCreate(lpcs) = -1)return -1;if(!m_wndMap.Create(NULL, WS_CHILD|WS_VISIBLE, CRect(0, 0, 100, 100), this, 10000)return -1;esriControls:IMapControl4Ptr pMapControl4;LPUNKNOWN lpUnknown = m_wndMap.GetControlUnknown();lpUnknown-QueryInterface(&pMapControl4);CString strMxd = _T(D:Program Files (x86)ArcGISTutorial DatausaUSA Base Map.mxd);pMapControl4-LoadMxFile(strMxd.AllocSysString();return 0;void CAEViewTest

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论