当前位置:软件学习 > 其它软件 >>

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();
 }
 } 
我打****的地方都会报错说找不到方法,不知道为什么????????????
补充:企业软件 ,  地理信息系统
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,