描述:
我正在学习利用vc实现mapx控件的功能,已经能够在vc的程序框架中实现地图显示,并且可以实现了放大、缩小、漫游以及图层控制等功能了。现在的问题是,希望能够在指定的位置(经纬度位置)上显示一个车辆图元!
我编写了一些代码但是却看不到车辆图元,相反显示的是一块32*32的黑色矩形块!
CMapX m_ctrlMapX;
void CStep2View::OnToolTest()
{
CMapXLayers layers = m_ctrlMapX.GetLayers();
CMapXFeature ftr;
try{
if (ftr.CreateDispatch(ftr.GetClsid()))
{
ftr = m_ctrlMapX.GetFeatureFactory().CreateSymbol();
CMapXStyle style = ftr.GetStyle(); //获得图元的风格
//设置图元的风格,显示位图
style.SetSymbolType(miSymbolTypeBitmap);
//指定所要显示位图的存放位置
style.SetSymbolBitmapName("D:\\Program Files\\MapInfo\\MapX 5.0\\CUSTSYMB\\CAR1-32.BMP");
//指定位图大小
style.SetSymbolBitmapSize(32);
//设置为透明
style.SetSymbolBitmapTransparent(TRUE);
//指定需要显示图元的位置(经纬度位置)
ftr.GetPoint().Set(106.580936, 29.561000);
layers.Item("871").AddFeature(ftr);
}
else
{
AfxThrowOleException(CO_E_CLASS_CREATE_FAILED);
}
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
那位大虾晓得,在vc中如何利用mapx在指定位置显示特定的位图图元阿???请赐教!多谢!
在线等!!
解决方案1:
我来了。。。
顺便问个问题,为什么我在添加中文的时候出错?
CMapXPoint Pnt;
CMapXFeatureFactory FeaFac;
CMapXLayer lyr;
CMapXFeature ftr;
CMapXStyle NewStyle;
Pnt.CreateDispatch(Pnt.GetClsid());
ftr.CreateDispatch(ftr.GetClsid());
NewStyle.CreateDispatch(NewStyle.GetClsid());
lyr = m_ctrlMapX.GetLayers().Item("Customers");
FeaFac = m_ctrlMapX.GetFeatureFactory();
NewStyle.SetSymbolType(miSymbolTypeBitmap);
NewStyle.SetSymbolBitmapSize(24);
NewStyle.SetSymbolBitmapTransparent(TRUE);
NewStyle.SetSymbolBitmapName("STOP1-32.BMP");
m_ctrlMapX.SetAutoRedraw(FALSE);
lyr.SetEditable(TRUE);
Pnt.Set(m_dMapX, m_dMapY);
VARIANT vtPoint;
vtPoint.vt = VT_DISPATCH;
vtPoint.pdispVal = Pnt.m_lpDispatch;
VARIANT vtStyle;
vtStyle.vt = VT_DISPATCH;
vtStyle.pdispVal = NewStyle.m_lpDispatch;
lyr.SetAutoLabel(TRUE);
ftr = FeaFac.CreateSymbol(vtPoint, vtStyle);
lyr.SetKeyField("GEONAME");
ftr.SetKeyValue((LPCTSTR)sName);//此处添加label
lyr.AddFeature(ftr.m_lpDispatch);
lyr.Refresh();
// lyr.UpdateFeature(ftr,ftr);
m_ctrlMapX.SetAutoRedraw(TRUE);
lyr.SetEditable(FALSE);