数据中心模板帮助手册_第1页
数据中心模板帮助手册_第2页
数据中心模板帮助手册_第3页
数据中心模板帮助手册_第4页
数据中心模板帮助手册_第5页
免费预览已结束,剩余23页可下载查看

付费下载

下载本文档

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

文档简介

该帮助手册是由中地数码为其数据中心开发模板而撰写的数据中心开发模板是基于微软的VisualStudio,的模板支持VC++、C#、VB三种语言,其中C++模板仅仅支持VS2005,C#和VB模板支持VS2005、VS2008、VS2010三个版本。数据中心开发模板是提数据中心驱动,下面分别说明。C++语言模数据中心插件项1.1基于VS2005的MapGIS该模板为工程模板,用以用户创建数据中心插件时创建该工程,选择”VisualC++→MapGISWizard→数据中心插件项目”模板,该模板创建成功后您将发现为您定制了”ReleaseDebug”版本的配置环境,同时您的输出定向到了”E:\MapGis7.1\01.Product\10.DEVELOP_ENV\Program”,这是公司开发使用的,当然了您可以更改到您的输出中。该模板是基于微软的<ATL项目>而修改了,其本质也是一个ATL工程,同时缺省的支持了MFC。1.2然后就可以创建数据中心插件和数据中心交互工具了首先看下如何创建数据数据中心用户插在工程上选择”添加类”,在框中选择”ATL→MapGIS→数据中心用户插件窗口布局”四个才会有效,需要注意的是插件的名称不能和已有的插件名称重1.6该页面中是该类的选项,缺省时候将该插件的线程模型设置为”两者”好了,点击”完成”按钮就创建了一个数据中心插件。下面我分别将三种不工具插CNoView//classATL_NO_VTABLECNoViewpublicCComObjectRootEx<CComMultiThreadModel>,publicCComCoClass<CNoView,&CLSID_NoView>,/*wMinor=*/publicpublicIDispatchImpl<IDCPlusInit,&IID_IDCPlusInit,&LIBID_DCExecuteKLLib,=*/1,/*wMinor=*/publicIDispatchImpl<IDCPlusObject,&IID_IDCPlusObject,/*wMajor=*/1,/*wMinor=*/publicCMultiDispatch<CNoView>//IObjectCategory接口(ObjectCategoryImpl模板实现了),同时还IDCPlusInitIDCPlusObject两个接口。IObjectCategorySTDMETHOD(OnCreate)(IMPIApplication*pMpiApplication)STDMETHOD(GetObjectCategory)(/*[out]*/IID*idCategoryBase,/*[out]*/IID*IObjectCategory接口是MapGIS插件对象接口,这四个方法均已被实现,下IDCPlusInitSTDMETHOD(PrepareEnv)(IDCAppModule*app);STDMETHOD(get_Name)(BSTR*friendname);中心执行体正确分发,下面来详细说明下:IDCPlusObjectSTDMETHOD(MainActive)(IDCEventArg*argument,IDCEventRet**STDMETHOD(SubActive)(IDCContext*context,IDCEventArg*argument,IDCEventRet**STDMETHOD(CancelActive)(IDCEventArg*argument,IDCEventRet**handflag);STDMETHOD(Property)(IDCEventArg*argument,IDCEventRet**handflag);STDMETHOD(Extend)(IDCEventArg*argument,IDCEventRet**handflag);除了SubActive外均可当普通数据中心方法使用,下面来详细说明下STDMETHOD(oWorld)(IDCEventArg*argument,IDCEventRet**心方法如果需要通过数据中心的”nip://”协议来调用则需要在NoView.rgsoWorld方法一样写入一些键值{valfunction=s'oWorld'valuseshare=s'FALSE'valargument=svalhelpstring=s'} oWorld”为该方法的标识,可以为中文,valfunction=s' oWorld)(IDCEventArg*argument,IDCEventRet**视图插1.7//classATL_NO_VTABLECViewPlugpublicCComObjectRootEx<CComMultiThreadModel>,publicCComCoClass<CViewPlug,publicIDispatchImpl<IViewPlug,&IID_IViewPlug,/*wMajor=*/1,/*wMinor=*/publicpublicIDispatchImpl<IDCPlusInit,&IID_IDCPlusInit,/*wMajor=*/1,/*wMinor=*/publicIDispatchImpl<IDCPlusObject,&IID_IDCPlusObject,/*wMajor=*/1,/*wMinor=*/publicCMultiDispatch<CViewPlug>//两个接口(EmbedViewImpl模板进行封装)IMPIEmbedViewSTDMETHOD(OnCreateView)(WIN_HANDLEcontainer,WIN_HANDLE*lEmbedViewWnd)STDMETHOD(get_WinHandle)(WIN_HANDLE*pVal)STDMETHOD(get_Resource)(UINTiIndex,IMPIResource**pVal)STDMETHOD(get_DataBag)(IDataBag**pVal)STDMETHOD(put_DataBag)(IDataBag(IObjectCategory法均已被EmbedViewImpl模板实现,下面来详细说明下:get_WinHandle:put_DataBag:PortSTDMETHOD(OnMessage)(LONGmessage,LONGram,LONGPortMapGISOnMessage:MapGIS交互插1.8好了,看看交互插件模板//classATL_NO_VTABLECGroupPlugpublicCComObjectRootEx<CComMultiThreadModel>,publicCComCoClass<CGroupPlug,&CLSID_GroupPlug>,publicIDispatchImpl<IGroupPlug,&IID_IGroupPlug,/*wMajor=*/1,/*wMinor=*/publicObjectCategoryImpl<&CLSID_GroupPlug,&IID_IMPIGroupTool>,publicIDispatchImpl<IDcToolMessage,&IID_IDcToolMessage,&LIBID_mc_DCGroupToolLib,/*wMajor=*/1,/*wMinor=*/publicIDispatchImpl<IDCPlusInit,&IID_IDCPlusInit,/*wMajor=*/1,/*wMinor=*/publicIDispatchImpl<IDCPlusObject,&IID_IDCPlusObject,/*wMajor=*/1,/*wMinor=*/0>,publicCMultiDispatch<CGroupPlug>//Added心交互插件是地图视图的,所以绝大多时候大家都选择使用工具插件来实现数据STDMETHOD(Finish)(ULONGnodInd);完成五个动作下面来详细说明下需要注意的是数据中心交互插件是指使用数据中心插件来管理数据中心交数据中心交互工从上面已经晓得数据中心交互工具是需要被数据中心插件包装才能让用户在外部首先看看如何创建交互工具1.91.10classATL_NO_VTABLECMyToolpublicCComObjectRootEx<CComMultiThreadModel>,publicCComCoClass<CMyTool,&CLSID_MyTool>,publicIDispatchImpl<IMyTool,&IID_IMyTool,&LIBID_DcPlugProject3Lib,=*/1,/*wMinor=*/0>,publicIDcToolIDcToolSTDMETHOD(get_State)(lState*pVal);STDMETHOD(put_State)(lStatenewVal);STDMETHOD(Pause)(LONGReseved);STDMETHOD(Stop)(LONGReseved);STDMETHOD(Start)(LONGReseved);STDMETHOD(OnLDlClick)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnKeyUp)(UINTButton,UINT t,UINTShift);STDMETHOD(OnKeyDown)(UINTButton,UINT t,UINTShift);STDMETHOD(OnLMouseDown)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnMouseMove)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnLMouseUp)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnRMouseDown)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnRMouseUp)(UINTButton,UINTShift,intX,intY);STDMETHOD(OnCreate)(IMPIApplication**pGroupTool,IDcToolMessage*pMsgSend);STDMETHOD(OnDraw)(IXDisplay*pDisplay);OnDraw:数据中 驱下面看看驱动程序的创建过程图1.11添加数据中 驱图1.12添加数据中 驱动界点“完成”完成数据中心数据中心作,数据中心驱动来实现这些动作,最后数据中心在操作节点时动态的调用该驱动的方其原理是通过继承抽象类CAbsNode来完成调用驱动的过程,数据中心节点ode通过包装该抽象类的所有方法来调用到驱动原理很简单来看看那创建的驱动类:#pragma#include<Denter.h>classCDcDrv:publicCAbsNode{//每棵要有不同的根(多次调用CreateRoot),但所有的共个驱virtualvoid odevirtualvoid*Create(void*pNode,constcharvirtualvoid*Open(void*pNode,constcharvirtuallongClose(void//<=0virtuallongRemove(void*hNode,constchar//获得本节点名称;的根节点不需要名virtuallongGetNodeName(void*hNode,CStringvirtualvoid*GetParent(void*hNode);virtuallongHasSubNode(voidvirtuallongSubNode(void*hNode,CString&subNodeName);virtuallongNextSubNode(void*hNode,CString&subNodeName);virtuallongGetSubNodeNum(void*hNode);//键值对的格式为五个内置的键 virtuallongReadData(void*hNode,CString&text);virtuallongWriteData(void*hNode,constchar*text,DWORD//删除键(值和属性//新建键(值和属性virtualvoidvirtuallongFreeObject(voidvirtuallongGetValue(void*hNode,constchar*key,CString&value,CString*att);virtuallongSetValue(void*hNode,constchar*key,constchar*value,const//TODO://TODO:#ifdefcplusplusextern"C"{declspec(dllexport)CAbsNode*DcDriverEntry();#ifdefcplusplus},从上面看清数据中心节点驱动的本质是一个动态库,其导出接口为DcDriverEntry方法是创建了一个驱动类的对象,CD 到该驱动的所有方法了。下面详细的说明下几个重要的方法:,C#语言模工具插打开VS2005,点击”菜单”→”新建”→”项目”,弹出”新建项目”框,”项目类型”MyToolPlug2.1所示:2.1输入完毕后点击”确定”按钮,弹出”工具插件属性设置”框,如图2.2所示。输IDCPlusInit接口、IDCPlusObject接口、IObjectCategory交互插打开VS2005,点击”菜单”→”新建”→”项目”,弹出”新建项目”框,”项目类型”MyEoPlug2.4所示:2.4输入完毕后点击”确定”按钮,弹出”交互插件属性设置”框,如图2.5所示。输IDCPlusInit接口、IDCPlusObject接口、IObjectCategory视图插MyViewPlug2.7所示:2.7输入完毕后点击”确定”按钮,弹出”视图插件属性设置”框,如图2.8所示。输件名称为”视图插件”,其他采用默认名称。IDCPlusInit接口、IDCPlusObject接口、IMPIEmbedViewIMPIEmbedViewMapGIS插件,所以它必须实现IObjectCategory接口,同时它还要实现IMPIEmbedView接口,但由于IMPIEmbedView接口继承了IObjectCategory接口,因此视图插件就不需要再继承windowscontainer,插件的窗口作为它的子窗口以便一致的布局插件的创建是从get_Resource方法中取得该视图的图标,标题等信息,然后调用OnCreateView方法让插件创建自己的窗口如此例子UserControl1)containercontainer的子窗口。创建的子窗口句柄作为返回值,containercontainerpublicstaticexternIntPtrSetParent(IntPtrhWnd,IntPtrparent);publicvoidOnCreateView(intcontainer,refintlEmbedViewWnd){frm=newUserControl1();SetParent(frm.Handle,newIntPtr(container));lEmbedViewWnd=frm.Handle.ToInt32();}VB语言模工具插MyToolPlug3.1所示:3.1输入完毕后点击”确定”按钮,弹出”工具插件属性设置”框,如图3.2所示。输IDCPlusInit接口、IDCPlusObject接口、IObjectCategoryIObjectCategoryMapGIS加载,也就是说它的接口函数是最的其它的实现或服务,如服务接口调用,消息处理,事件等。IObjectCategory的函数有每个插件必须严格遵守的语义上的要求。例如资源的初始化应当在OnCreate中进行,在OnConnect方法中从MPIApplication取得外部资源在OnDisconnect中插件占用的资源交互插MyEoPlug3.4所示:3.4输入完毕后点击”确定”按钮,弹出”交互插件属性设置”框,如图3.5所示。输IDCPlusInit接口、IDCPlusObject接口、IObjectCategory其他视图而设计的(数据中心交互插件是地图视图的,所以大部分交互插件是无视图成五个动作。需要注意的是数据中心交互插件是指使用数据中心插件来管理数据中心视图插MyViewPlug3.7所示:3.7输入完毕后点击”确定”按钮,弹出”视图插件属性设置”框,如图示。输件名称为”视图插件”,其他采用默认名称。IDCPlusInit接口、IDCPlusObject接口、IMPIEmbedViewIMPIEmbedViewMapGIS插件,所以它必须实现IObjectCategory接口,同时它还要实现IMPIEmbedView接口,但由于IMPIEmbedView接口继承了IObjectCategory接口,因此视图插件就不需

温馨提示

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

评论

0/150

提交评论