分类: C/C++
2008-03-12 08:46:07

enum FGScaleType
{
ST_SINGLELINE,
ST_SINGLELINE2,
ST_SINGLELINE3,
ST_FILLRECT,
ST_FILLRECT2,
ST_STEPPEDLINE,
ST_LINERECT
};
class CFGScaleDraw
{
......
FGScaleType m_ScaleType;
float m_fScale;
int m_nMinX, m_nMaxX, m_nMinY, m_nMaxY;
public:
void SetScaleType(int type);
void SetScale(float scale);
void SetRect(CRect rect);
void SetRect(int minx, int miny, int maxx, int maxy);
void DrawScale(CDC* pdc);
}; 其中,m_fScale是比例尺分母,例如1:10000的比例尺,m_fScale = 10000;m_nMinX, m_nMaxX, m_nMinY, m_nMaxY控制地图比例尺绘制的范围;DrawScale用于比例尺输出。1/m_fScale = ds / DS;为了计算ds,我们首先把以像素为单位表达的屏幕坐标转换为以0.1mm为单位表达的屏幕坐标,方法是通过DPtoLP函数:
CPoint p[2]; p[0].x = m_nMinX; p[0].y = m_nMinY; p[1].x = m_nMaxX; p[1].y = m_nMaxY; pdc->DPtoLP(p, 2);现在求取ds = p[1].x - p[0].x。再求取DS = ds * m_fScale * 0.00001。(假设地图单位为米)
CFGScaleDraw的使用: CFGScaleDraw m_ScaleDraw; m_ScaleDraw.SetScale(10000); m_ScaleDraw.SetRect(100, 100, 400, 120); m_ScaleDraw.SetScaleType(ST_SINGLELINE); m_ScaleDraw.DrawScale(pDC);
关于代码和文章中的问题大家可以和作者联系: