GeoMedia是美国Intergraph公司开发的桌面GIS平台,至于GeoMedia的介绍我在这里不多说,可以到Intergraph的网站www.intergraph.com/geomedia/或者通过Google了解更多详细情况。在这里所提到的Geomedia均指GeoMedia Professional 4.0 或 5.0。
使用GeoMedia开发GIS应用程序,需要了解一些GeoMedia平台中的一些术语和概念,请参见。在GeoMedia的帮助文档GeoMedia Professional Object Reference中可以找到很多VB例子,在这里我主要介绍用VC++6.0如何开发基于GeoMedia的应用程序。
为了让大家有个初步的概念和便于理解的环境,我先不介绍一些平台相关的术语和特性,而是直接描述如何用VC++6创建一个嵌入GeoMedia平台中运行的自定义工具程序。
为了你在下面的过程中不碰到什么不必要的麻烦,请先安装好VC++6.0英文版+SP6补丁。
好,开始进入正题。
第一步:
打开VC6,创建工程。
工程类型为ATL COM AppWizard,我在这里将工程名字取为TestCmd。Next到下一步设置我们创建的ATL COM组件类型为Dynamic Link Library (DLL),并且选择MFC支持(这是为了使用大家比较熟悉的界面控制方式,避免对本主题内容理解上的障碍,如果你对ATL/WTL比较熟悉,那么完全可以不选择MFC的支持)。如下图:
第二步:
工程创建好了之后,我们接下来要做的第一件事就是创建一个ATL COM对象,选择菜单Insert -> New ATL Object,在ATL Ojbect Wizard对话框中选择Objects,类型为Simple Object。在Wizard的下一步中,我们需要设置ATL Object的名字,我这里设置为TestCmdCom。在attributes标签页中设置线程模型(Threading Model)选择为单线程(Simgle), 接口(Interface)设置为双接口(Dual),也就是支持IDispatch和vtable绑定。 Aggregation设置为NO,也就是不需要聚合支持。另外勾选Support ISupportErrorInfo,以实现ISupportErrorInfo接口,其他的不需要选择。如下图:
第三步:
在IDE自动生成的TestCmdCom.h文件中加入如下接口声明:
// ITestCmdCom
public:
STDMETHOD(Help)(/*[out, retval]*/ VARIANT_BOOL * pvbVal);
STDMETHOD(Terminate)();
STDMETHOD(RestoreEvents)(/*[in]*/ IDispatch* objViewWindow);
STDMETHOD(IgnoreEvents)(/*[in]*/ IDispatch* objViewWindow);
STDMETHOD(RemoveView)(/*[in]*/ IDispatch* objViewWindow);
STDMETHOD(AddView)(/*[in]*/ IDispatch* objViewWindow);
STDMETHOD(Deactivate)();
STDMETHOD(CanDeactivate)(/*[in]*/ IDispatch* objViewWindow, /*[out, retval]*/ VARIANT_BOOL* pbCanDeactivate);
STDMETHOD(Activate)();
STDMETHOD(CanActivate)(/*[out, retval]*/ VARIANT_BOOL* pbCanActivate);
STDMETHOD(CanEnable)(/*[out, retval]*/ VARIANT_BOOL* pbCanEnable);
STDMETHOD(Initialize)(/*[in]*/ IDispatch* objApp, /*[in]*/ IDispatch* objViewListeners);
STDMETHOD(get_IsDone)(/*[out, retval]*/ VARIANT_BOOL *pVal);
private:
VARIANT_BOOL m_bIsDone;
GeoMedia::IGMApplicationPtr m_spApplication;
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页





网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) 