阅读:2263回复:4
[原创]我的原创第二贴(自己开发的TOC控件和符号管理器)
<P>说明一下:开发环境<FONT color=red>VS.NET2005+ArcEngine9.2</FONT><BR>昨天晚上刚刚写完的,上传一个工程文件.里面有一个TOC控件,可以直接在窗体中使用.还有一个是符号管理器,通过接口可以调用.<BR>ISymbolSelector接口定义打开符号选择器的属性和方法.<BR> public interface ISymbolSelector<BR> {<BR> IStyleGallery StyleGallery { get;set;} //Style文件的符号集<BR> void SetObject(object @object); //传入符号选择器中的符号(目前支持点,线,面,文字,指北针)<BR> object GetOject(); //返回的符号对象<BR> bool DoModal(); //打开符号选择器的方法,点击确写按钮时,返回True<BR> }<BR><BR>SymbolSelector实现ISymbolSelector接口,<BR><BR><BR>通过SymbolEditor可打开符号编辑器窗口,SymbolEditor实现ISymbolEditor接口和IPropertyPageEvents接口<BR> public interface ISymbolEditor<BR> {<BR> bool EditSymbol(object @object); //传入符号编辑器的符号对象,当点击确定按钮时,返回True<BR> IStyleGallery StyleGallery { get;set;} //Style文件的符号集<BR> bool ShowUnits { set;} //是否显示单位ComboBox控件<BR> object GetSymbol(); //返回的符号对象<BR> string Title { set;} //符号编辑器的标题<BR> }<BR><BR> interface IPropertyPageEvents<BR> {<BR> event OnValueChangedEventHandler OnValueChanged; //符号改变的委托事件<BR> }<BR><BR><FONT color=red>具体使用的例子:</FONT><BR> <FONT color=blue>private IStyleGallery m_pStyleGallery = null;<BR> m_pStyleGallery = new StyleGalleryClass(); //StyleGalleryClass类在Carto.DisplayLib命名空间中</FONT><BR><FONT color=blue> //=====在此添加符号库文件</FONT><BR><FONT color=blue> //通过接口转换,得到IStyleGalleryStorage接口<BR> IStyleGalleryStorage pStyleGalleryStorage = this.m_pStyleGallery as IStyleGalleryStorage;<BR> //=====pStyleGalleryStorage.AddFile(pStyleGalleryStorage.DefaultStylePath + "forestry.style");<BR> pStyleGalleryStorage.AddFile(Application.StartupPath + @"\ESRI.style");</FONT><BR><FONT color=blue></FONT><BR><FONT color=blue></FONT><BR><FONT color=blue> ISymbolSelector pSymbolSelector = new SymbolSelector();<BR> pSymbolSelector.StyleGallery = this.m_pStyleGallery;<BR> //该符号库目前支持以下五种符号类型:点,线,面,文字,指北针<BR> pSymbolSelector.SetObject(new MarkerNorthArrowClass());<BR> //pSymbolSelector.SetObject(new SimpleMarkerSymbolClass());<BR> //pSymbolSelector.SetObject(new SimpleLineSymbolClass());<BR> //pSymbolSelector.SetObject(new SimpleFillSymbolClass());<BR> //pSymbolSelector.SetObject(new TextSymbolClass());<BR> if (pSymbolSelector.DoModal())<BR> {<BR> object obj = pSymbolSelector.GetOject();<BR> //GetObject方法返回就是得到的对象,再接口转换一下就得到你要的符号类型了</FONT><BR><FONT color=blue> }</FONT><BR><BR><FONT color=purple>TOC控件(<FONT color=red>目前仅支持MapControl控件,过几天扩展一下支持PageLayout,Scene,Globe控件</FONT>)使用例子:</FONT><BR><FONT color=purple> (1)将TocControl类库引入工程,将tableOfContent控件加入窗体(如果加载出错,可能需要将SimpleGIS.dl文件复制到C:\Windows\System32目录下)</FONT><BR><FONT color=purple> (2)初始化:</FONT><BR><FONT color=purple> private IMapControl2 m_pMapControl = null;<BR> m_pMapControl = axMapControl1.Object as IMapControl2;</FONT><BR><FONT color=purple> tableOfContent1.SetBuddyHook(m_pMapControl);<BR> tableOfContent1.StyleGallery = this.m_pStyleGallery;<BR> tableOfContent1.UpdateContents();<BR> (3)打开地图文档:</FONT><BR><FONT color=purple> 使用我们的TOC控件时,不能使用ArcEngine的LoadMxFile方法,必须按如下方法来使用:</FONT><BR><FONT color=purple> OpenFileDialog opdMxd = new OpenFileDialog();<BR> opdMxd.Filter = "地图文档(*.mxd)|*.mxd";<BR> if (opdMxd.ShowDialog()==DialogResult.OK)<BR> {<BR> this.Cursor = Cursors.WaitCursor;<BR> string sMapName = opdMxd.FileName;<BR> tableOfContent1.OpenDocument(sMapName);<BR> this.Cursor = Cursors.Default;<BR> }</FONT><BR><BR><BR><FONT color=red>两个DLL文件中还提供了其他接口,例如IColorSelector,ColorSelector实现这个接口,专门用于打开颜色对话框,类似于Esri的颜色控件.</FONT><BR><FONT color=red>IColorRampSelector接口定义打开颜色梯度的窗体,</FONT><BR><FONT color=red>更多接口将会不断定义和开发出来,免费使用,希望大家提出一些具体的修改意见,谢谢.</FONT><BR><FONT color=red>以后的开发内容我会在博客公布的,<BR></FONT></P>
<P><FONT color=red>由于不知道怎么上传附件,郁闷,有需要的朋友QQ或MSN联系我,</P></FONT> |
|
|
1楼#
发布于:2007-04-07 22:12
<FONT color=#ff0000>多多支持!</FONT> 我也需要
|
|
2楼#
发布于:2007-04-12 12:29
<P>楼主可以把附件发到<a href="mailtgisempire@gmail.com" target="_blank" >gisempire@gmail.com</A></P>
<P>我会传上来</P> |
|
|
3楼#
发布于:2007-04-13 12:21
<P>呵,这种方法未免太麻烦了吧,如果这样,那就算了,就准备撤出这个论坛了</P>
|
|
|
4楼#
发布于:2007-04-13 19:51
诚实守信
|
|