MAPX显示自定义字体有关问题
MAPX显示自定义字体问题
首先我导入一个自定义的字体 OLDCAR
然后我在创建了一个图层Car,创建代码如下
// 创建图层
CMapXLayer lyrCar = m_pCtrlMapX->GetLayers().CreateLayer(_T("Car"), NULL, 1, 32);
m_pCtrlMapX->GetLayers().SetAnimationLayer(lyrCar);
m_pCtrlMapX->SetMousewheelSupport(miFullMousewheelSupport);
m_pCtrlMapX->SetAutoRedraw(TRUE);
lyrCar.SetSelectable(FALSE);
lyrCar.SetAutoLabel(TRUE);
然后完成一个函数在地图上画该字体的一个图标
/*
* pt 地图上的坐标
* strLayerName 图层的名字
* iColor 颜色
* iSize 大小
*/
int CGPSWnd::DrawCar(GPSPoint &pt, const CString &strLayerName, int iColor, int iSize)
{
m_pCtrlMapX->GetDefaultStyle().GetSymbolFont().SetName(_T("OLDCAR"));
CString str31 = m_pCtrlMapX->GetDefaultStyle().GetSymbolFont().GetName();
// 得到图层对象
CMapXLayer staLr = m_pCtrlMapX->GetLayers().Item(_T("Car"));
// 设置所有图元对象属性
//staLr.GetStyle().SetSymbolFontColor()
staLr.SetOverrideStyle(FALSE);
staLr.GetStyle().GetSymbolFont().SetName(_T("OLDCAR"));
staLr.GetStyle().SetSymbolCharacter(48);
staLr.GetLabel().SetLineType(miLineTypeNone);
staLr.GetLabel().SetOverlap(TRUE);
// 创建获取一个Map Feature
CMapXFeature FtA = m_pCtrlMapX->GetFeatureFactory().CreateSymbol();
// 获得图元的风格
CMapXStyle style = FtA.GetStyle();
// 设置图元的风格,显示图标
style.SetSymbolType(miFeatureTypeSymbol);
// 设置图元使用的字体
style.GetSymbolFont().SetName(_T("OLDCAR"));
// 设置图元使用的是哪个符号
style.SetSymbolCharacter(48);
// 设置颜色
style.SetSymbolFontColor(RGB(255, 255, 255));
// 设置图元显示的位置
FtA.GetPoint().Set(pt.x, pt.y);
// 将图元加入到图层
CMapXFeature ftr = staLr.AddFeature(FtA);
ftr.Update(TRUE);
CString str3 = FtA.GetStyle().GetSymbolFont().GetName();
str3 = staLr.GetStyle().GetSymbolFont().GetName();
return 1;
}
实验中发现staLr.SetOverrideStyle(FALSE);
设置成TRUE中图元可以显示图标但是只有所有的图元都是统一的,要是设置成FLASE,图元设置的字体无效,
但是获取字体的名字时还是显示OLDCAR,不知道为什么,有高手做过么
------解决方案--------------------
你转换成ttf文件后,放到C:\Windows\Fonts里面安装就可以了。
首先我导入一个自定义的字体 OLDCAR
然后我在创建了一个图层Car,创建代码如下
// 创建图层
CMapXLayer lyrCar = m_pCtrlMapX->GetLayers().CreateLayer(_T("Car"), NULL, 1, 32);
m_pCtrlMapX->GetLayers().SetAnimationLayer(lyrCar);
m_pCtrlMapX->SetMousewheelSupport(miFullMousewheelSupport);
m_pCtrlMapX->SetAutoRedraw(TRUE);
lyrCar.SetSelectable(FALSE);
lyrCar.SetAutoLabel(TRUE);
然后完成一个函数在地图上画该字体的一个图标
/*
* pt 地图上的坐标
* strLayerName 图层的名字
* iColor 颜色
* iSize 大小
*/
int CGPSWnd::DrawCar(GPSPoint &pt, const CString &strLayerName, int iColor, int iSize)
{
m_pCtrlMapX->GetDefaultStyle().GetSymbolFont().SetName(_T("OLDCAR"));
CString str31 = m_pCtrlMapX->GetDefaultStyle().GetSymbolFont().GetName();
// 得到图层对象
CMapXLayer staLr = m_pCtrlMapX->GetLayers().Item(_T("Car"));
// 设置所有图元对象属性
//staLr.GetStyle().SetSymbolFontColor()
staLr.SetOverrideStyle(FALSE);
staLr.GetStyle().GetSymbolFont().SetName(_T("OLDCAR"));
staLr.GetStyle().SetSymbolCharacter(48);
staLr.GetLabel().SetLineType(miLineTypeNone);
staLr.GetLabel().SetOverlap(TRUE);
// 创建获取一个Map Feature
CMapXFeature FtA = m_pCtrlMapX->GetFeatureFactory().CreateSymbol();
// 获得图元的风格
CMapXStyle style = FtA.GetStyle();
// 设置图元的风格,显示图标
style.SetSymbolType(miFeatureTypeSymbol);
// 设置图元使用的字体
style.GetSymbolFont().SetName(_T("OLDCAR"));
// 设置图元使用的是哪个符号
style.SetSymbolCharacter(48);
// 设置颜色
style.SetSymbolFontColor(RGB(255, 255, 255));
// 设置图元显示的位置
FtA.GetPoint().Set(pt.x, pt.y);
// 将图元加入到图层
CMapXFeature ftr = staLr.AddFeature(FtA);
ftr.Update(TRUE);
CString str3 = FtA.GetStyle().GetSymbolFont().GetName();
str3 = staLr.GetStyle().GetSymbolFont().GetName();
return 1;
}
实验中发现staLr.SetOverrideStyle(FALSE);
设置成TRUE中图元可以显示图标但是只有所有的图元都是统一的,要是设置成FLASE,图元设置的字体无效,
但是获取字体的名字时还是显示OLDCAR,不知道为什么,有高手做过么
------解决方案--------------------
你转换成ttf文件后,放到C:\Windows\Fonts里面安装就可以了。