MapObject控件的使用之改变图层颜色

原创 2004年05月29日 15:55:00

MapObject控件的使用之改变图层颜色<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者:张松伟

zswking@163.com

 

如果你的地国正在显示一个“中国地图”的图层,而图层中每个省的颜色都是一样的,你是不是想把它做成真实地图一样的效果,给各个省填上颜色呢?好,让我们开始吧。

       注意,一定要确保你的“中图地图”图层数据中有标识各个省的数据和字段(可以在ArcMap中看到),因为只有能区别出各个区域才能对区域填色,现在我们假设图层名称为China, 标识各个省的字段为NAME。好了,在你程序中加入改变颜色的函数吧。

 

void CMapCortrol::ChangeChinaColor()

{

       CMoRecordset recs; //图层的记录集

       CMoStrings strs;        //MO的字符串类

       strs.CreateDispatch("MapObjects2.Strings");

      

       //得到图层数据中NAME字段的第条记录,保存在strs中。

       CMoMapLayer lay = m_map.GetLayers().Item(COleVariant("China"));

       recs = lay.GetRecords();

       while(!recs.GetEof())

       {            

              CMoFields mfs = recs.GetFields();

              CMoField mf = mfs.Item(COleVariant("NAME"));

              CString s = mf.Get_Value().bstrVal;

              strs.Add(s);

             

              recs.MoveNext();

       }

      

       //改变区域颜色

       CMoValueMapRenderer vmRend;

       vmRend.CreateDispatch("MapObjects2.ValueMapRenderer");

       vmRend.SetValueCount(strs.GetCount());

       vmRend.SetField("NAME");

 

       for(int i=0; i<strs.GetCount(); i++)

       {

//将保存的省名附给vmRend

              VARIANT V;

              V.vt = VT_I2;

              V.iVal = i;

              vmRend.SetValue(i, strs.Item(V));

 

              //取出省名并进行判断

              if(vmRend.GetValue(i) == "北京市" || vmRend.GetValue(i) == "上海市" ||

                     vmRend.GetValue(i) == "江西省" || vmRend.GetValue(i) == "四川省")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(239,252,230));

              }

              else if(vmRend.GetValue(i) == "安徽省" || vmRend.GetValue(i) == "黑龙江" ||

                     vmRend.GetValue(i) == "辽宁省" || vmRend.GetValue(i) == "广西壮族自治区" ||

                     vmRend.GetValue(i) == "台湾省" || vmRend.GetValue(i) == "甘肃省" ||

                     vmRend.GetValue(i) == "天津市" || vmRend.GetValue(i) == "山西省")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(241,232,252));

              }

              else if(vmRend.GetValue(i) == "山东省" || vmRend.GetValue(i) == "陕西省" ||

                     vmRend.GetValue(i) == "湖南省" || vmRend.GetValue(i) == "海南省" ||

                     vmRend.GetValue(i) == "澳门" || vmRend.GetValue(i) == "香港")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(252,237,248));

              }

              else if(vmRend.GetValue(i) == "河南省" || vmRend.GetValue(i) == "内蒙古自治区" ||

                     vmRend.GetValue(i) == "福建省" || vmRend.GetValue(i) == "贵州省" ||

                     vmRend.GetValue(i) == "青海省")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(252,251,235));

              }

              else if(vmRend.GetValue(i) == "江苏省" || vmRend.GetValue(i) == "西藏自治区")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(252,230,246));

              }

              else if(vmRend.GetValue(i) == "吉林省" || vmRend.GetValue(i) == "河北省" ||

                     vmRend.GetValue(i) == "浙江省" || vmRend.GetValue(i) == "湖北省" ||

vmRend.GetValue(i) == "广东省" || vmRend.GetValue(i) == "新疆维吾尔族自治区" || vmRend.GetValue(i) == "云南省" || vmRend.GetValue(i) == "宁夏回族自治区")

              {

                     vmRend.GetSymbol(i).SetColor(RGB(245,252,252));

              }

              //设置省界的颜色

              vmRend.GetSymbol(i).SetOutlineColor(RGB(185,185,185));

       }

       lay.SetRenderer(vmRend);

       m_map.Refresh();

}

OK,在加完图层后调用这个函数,看看是不是很漂亮?本人水平有限,欢迎大家批评指正。

MFC修改控件颜色

修改CButton背景色 //直接在窗体类中加了个DRAW事件,试了下可以修改BUTTON背景和字体颜色。。。 void CUuiiDlg::OnDrawItem(int nIDCtl, L...
  • jiangqin115
  • jiangqin115
  • 2015年03月18日 12:16
  • 978

改变android控件颜色

   许多应用都需要根据用户的操作来改变图形颜色,文字颜色。 最多的应用场景包括,当用户将焦点移动到某一个模块时,高亮那个...
  • u012422855
  • u012422855
  • 2016年03月04日 09:42
  • 1390

MapGIS更改某图层里的简单要素类

郑重声明:此文为本人原创,旨在为参加全国高校GIS技能大赛的同学们以及初学MapGIS的朋友提供一些参考,若有疑问可留言提问,转载请注明出处! 本示例代码实现的功能是:点击某点图层后,进行放大闪烁。...
  • LforeverN
  • LforeverN
  • 2013年12月17日 11:02
  • 1002

MFC修改界面和控件颜色

重新ON_WM_PAINT()、ON_WM_CTLCOLOR()消息对应的函数OnPaint()、OnCtlColor() (一)OnPaint()//CDialogEx::OnPaint(); ...
  • dlhlSC
  • dlhlSC
  • 2017年01月24日 20:17
  • 1538

Android 自定义控件 改变图片颜色来实现类似selector点击更改颜色的效果

最近研究自定义控件,看到一个很有意思的类LightingColorFilter(如果有这个需求:点击一个图片改变他的颜色,而不是替换成另一张点击效果的图片。那么这个类就有用了),打算用这个实现一个点击...
  • Joshua_zhanglz
  • Joshua_zhanglz
  • 2015年05月04日 11:00
  • 1882

Android自定义控件提供颜色属性动态改变控件颜色

Android自定义控件提供颜色属性动态改变控件颜色 因为按钮的样式都是用xml文件实现的,因此颜色也是指定好的。后来想着别人要使用你的控件,颜色肯定需要和他们自己的应用搭配,所以如果要做好就需要提...
  • Shirley0207
  • Shirley0207
  • 2017年12月15日 15:28
  • 245

MFC修改对话框及控件背景颜色 - 很轻松!

1、修改静态文本框、编辑框、按钮等子控件的显示效果 MFC中对主窗口和子控件重绘之前都会调用OnCtlColor函数来进行一些基本的属性设置,如设置子控件的背景模式(是否透明等)、文本颜色、...
  • baobei0112
  • baobei0112
  • 2016年07月20日 11:01
  • 5420

修改static控件背景颜色和文字颜色

当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息。如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄,...
  • softn
  • softn
  • 2016年06月20日 06:41
  • 1761

关于MFC中修改控件字体和背景颜色的方法

用MFC设计界面程序比其他的主流界面开发
  • Mirale
  • Mirale
  • 2014年07月09日 22:36
  • 3618

mfc中设置控件颜色

在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:   afx_msg HB...
  • echojiangyq
  • echojiangyq
  • 2014年04月23日 09:28
  • 3554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MapObject控件的使用之改变图层颜色
举报原因:
原因补充:

(最多只允许输入30个字)