|
阅读:1670回复:6
帮我看看(VC+MO)
我想在地图上动态打出红色实心圆点,可是运行时打出的却是方形的,并且颜色随机变化,以下是我的相关程序,帮我看看啊~
void CEasyMapView::OnMouseDownMap1(short Button, short Shift, long X, long Y) { // Get the tracking layer CMoTrackingLayer tLayer(m_map.GetTrackingLayer()); switch (m_curTool) { case ID_MAP_ADDEVENT: { CMoPoint mapPt(m_map.ToMapPoint((float)X,(float(Y)))); CMoTrackingLayer trackLayer(m_map.GetTrackingLayer()); trackLayer.AddEvent(mapPt,0); break; } void CEasyMapView::OnAfterTrackingLayerDrawMap1(long hDC) { // TOD Add your control notification handler code here CMoSymbol sym; sym.CreateDispatch(TEXT("MapObjects2.Symbol")); sym.SetColor(moRed); sym.SetSymbolType(moPointSymbol); sym.SetStyle(moCircleMarker); for (int i = 0; i < m_points.GetSize(); i++) m_map.DrawShape(*m_points, sym); } |
|
|
|
1楼#
发布于:2004-10-21 21:59
<P>我觉得应该把symbol定义在前边,不要放在OnAfterTrackingLayerDrawMap()里边,先定义symbol再画点,你试试!</P>
|
|
|
2楼#
发布于:2004-10-21 22:45
<P>试了不行~这个有关系么?</P>
|
|
|
|
3楼#
发布于:2004-10-23 09:58
回复:(hyb1011)帮我看看(VC+MO)
<P>在OnInitialUpdate()里面加上下面语句:</P>
<P> CMoTrackingLayer tLayer(m_map.GetTrackingLayer()); tLayer.SetSymbolCount(1);</P> <P> CMoSymbol sym(tLayer.GetSymbol(0)); sym.SetColor(moRed); sym.SetSymbolType(moPointSymbol); sym.SetStyle(moCircleMarker); </P> <P>试试行不。</P> |
|
|
4楼#
发布于:2004-10-23 19:42
<P>可以了,谢谢~<img src="images/post/smile/dvbbs/em04.gif" />
以下是总结的两种加红色圆点的方法,供和我有类似问题的新手参考,请大家指教: 一。 void CEasyMapView::OnMouseDownMap1(short Button, short Shift, long X, long Y) { switch (m_curTool) { case ID_MAP_ADDPOINTS: { VARIANT va; VariantInit(;va); va.vt = VT_I4; CMoPoint* point =new CMoPoint(m_map.ToMapPoint((float)X, (float)Y)); if (LPDISPATCH(point)) m_points.Add(point); // create a temp rectangle with which to refresh the screen // around the point CMoRectangle r = CMoRectangle(); r.CreateDispatch(TEXT("MapObjects2.Rectangle")); r.SetBottom(point->GetY()); r.SetLeft(point->GetX()); r.SetTop(point->GetY()+1.0); r.SetRight(point->GetX()+1.0); r.ScaleRectangle(50.0); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; tLayer.Refresh(true, va); break; } } } void CEasyMapView::OnAfterTrackingLayerDrawMap1(long hDC) { // TOD Add your control notification handler code here CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; sym.SetColor(moPurple); // Draw points // sym.SetColor(moRed); sym.SetSymbolType(moPointSymbol); sym.SetStyle(moCircleMarker); for (int i = 0; i < m_points.GetSize(); i++) m_map.DrawShape(*m_points, sym); } 二。 void CEasyMapView::OnMouseDownMap1(short Button, short Shift, long X, long Y) { switch (m_curTool) { case ID_MAP_ADDEVENT: { CMoPoint mapPt(m_map.ToMapPoint((float)X,(float(Y)))); CMoTrackingLayer trackLayer(m_map.GetTrackingLayer()); trackLayer.AddEvent(mapPt,0); break; } } } void CEasyMapView::OnInitialUpdate() { CMoSymbol sym(tLayer.GetSymbol(0)); sym.SetColor(moRed); sym.SetSymbolType(moPointSymbol); sym.SetStyle(moCircleMarker); }</P> [此贴子已经被作者于2004-10-23 19:56:48编辑过]
|
|
|
|
5楼#
发布于:2004-10-24 07:18
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
|
|
6楼#
发布于:2004-10-25 14:15
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
|