MAPX在VC++中应用

// -----------------------------------------------------------------------
// Reference: <MapInfo MapX 5.0 开发人员指南>
// -----------------------------------------------------------------------

<1> 控件加入到工程:

MapInfo MapX 5.0 开发人员指南指出, 不应该采用的方法:Project –> Add To Project –> Components and Controls,找到Registered ActiveX Controls –> MapInfo MapX V5,单击Insert。但是这插入的将是不完整的,不应该采用。

正确的方法:在项目中包含控件示例程序中提供的MapX.cpp和MapX.h文件。把这两个文件拷贝到工程目录下,Project –> Add To Project –> Files,找到MapX.cpp和MapX.h,单击OK。

<2> 控件的创建

假定,工程类型为MFC exe工程,sdi类型,工程向导各选项采用默认设置。注意需要选中ActiveX Control一项。

首先在CView或其派生类中声明成员变量CMapX m_ctrlMap;

然后为控件提供一个资源ID,如IDC_MAP。View –> Resource Symbols,选择New…

重载视图类的OnCreate()函数,也就是创建WM_CREATE消息处理程序。在创建视图时创建MapX控件。

MapX控件的Create()函数有两个原型(见MapX.h),这里我们采用后一个,即非虚函数的那个。

if (!m_ctrlMap.Create(NULL, WS_VISIBLE, CRect(0, 0, 100, 100), this, IDC_MAP))

{return –1;}

为保证控件的大小随着CView窗口的大小变化而变化,重载视图类的OnSize()函数,也就是创建WM_SIZE消息处理程序。可使用m_ctrlMap.MoveWindow(0, 0, cx, cy, TRUE)。

为保证控件可靠地获得焦点,可以重载CView的OnSetFocus(),使控件在视图获得焦点的同时也获得焦点。可使用m_ctrlMap.SetFocus()。

从上面几项操作我们可以注意到:由于CMapX的基类是CWnd,所以窗口的操作和特性等对于MapX控件也是通用的。

 

posted @ 2010-11-22 21:40  frogrocket  阅读(615)  评论(0编辑  收藏  举报