VS2005+MapInfo设置多边形区域
各位大哥大姐们好,我初学MapInfo,想请教一下,如何用代码实现设置多边形区域(C#) --------------------编程问答-------------------- 使用了CreateCustomTool方法创建 polytool 工具,然后根据这个去设置多边形区域,联机帮助和《MapX参考指南》中会对该对象给出解释,具体的代码实现自己写写吧! --------------------编程问答-------------------- 这是联机帮助里的部分示例代码:const short CUSTOM_POLYGON_TOOL = 42;
const short CUSTOM_POLYLINE_TOOL = 43;
if(Flags==miPolyToolEnd) {
// 用户通过双击完成 PolyTool 的使用
if(ToolNum==CUSTOM_POLYGON_TOOL) {
// 制作新的区域图元并将其添加到第一个图层
CMapXFeature f;
CMapXPoints pts;
pts.AttachDispatch(Points,FALSE);
if(!f.CreateDispatch(f.GetClsid())) {
TRACE0("Failed to Create Point object");
return;
}
try {
f.Attach(m_Map.GetDispatch());
// 设置多边形的样式
f.SetType(miFeatureTypeRegion);
f.GetStyle().SetRegionPattern(miPatternSolid);
f.GetStyle().SetRegionColor(255);
f.GetStyle().SetRegionBorderColor(0);
f.GetStyle().SetRegionBorderWidth(2);
f.GetStyle().SetRegionBorderStyle(1);
// 现在使用由事件为我提供的点
f.GetParts().Add(pts);
m_Map.GetLayers().Item(1).AddFeature(f);
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
} else if(ToolNum==CUSTOM_POLYLINE_TOOL) {
CMapXFeature f;
CMapXPoints pts;
pts.AttachDispatch(Points,FALSE);
if(!f.CreateDispatch(f.GetClsid())) {
TRACE0("Failed to Create Feature object");
return;
}
try {
f.Attach(m_Map.GetDispatch());
// 设置多义线的样式
f.SetType(miFeatureTypeLine);
f.GetStyle().SetLineStyle(1);
f.GetStyle().SetLineColor(255);
f.GetStyle().SetLineWidth(2);
// 现在使用由事件为我提供的点
f.GetParts().Add(pts);
m_Map.GetLayers().Item(1).AddFeature(f);
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
} // 其他可能的 Flag 值:
// miPolyToolBegin 用户开始使用该工具
// miPolyToolEndEscaped 用户取消该工具
// miPolyToolInProgress用户向多义线添加新的节点或使用 BACKSPACE 删除节点
}
我写的时候 --------------------编程问答-------------------- const short CUSTOM_POLYGON_TOOL = 42;
const short CUSTOM_POLYLINE_TOOL = 43;
void CSampleProjectView::OnPolyToolUsed(short ToolNum, long Flags, LPDISPATCH Points, BOOL bShift, BOOL bCtrl, BOOL FAR* EnableDefault) {
if(Flags==miPolyToolEnd) {
// 用户通过双击完成 PolyTool 的使用
if(ToolNum==CUSTOM_POLYGON_TOOL) {
// 制作新的区域图元并将其添加到第一个图层
CMapXFeature f;
CMapXPoints pts;
pts.AttachDispatch(Points,FALSE);*********************************
if(!f.CreateDispatch(f.GetClsid())) { ******************************
TRACE0("Failed to Create Point object");
return;
}
try {
f.Attach(m_Map.GetDispatch());**********************************
// 设置多边形的样式
f.SetType(miFeatureTypeRegion);
f.GetStyle().SetRegionPattern(miPatternSolid);
f.GetStyle().SetRegionColor(255);
f.GetStyle().SetRegionBorderColor(0);
f.GetStyle().SetRegionBorderWidth(2);
f.GetStyle().SetRegionBorderStyle(1);
// 现在使用由事件为我提供的点
f.GetParts().Add(pts);*************************************
m_Map.GetLayers().Item(1).AddFeature(f);************************************
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
我打****的地方都会报错说找不到方法,不知道为什么????????????
补充:企业软件 , 地理信息系统