⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagemap.h

📁 Visual C++_ 600 编程学习捷径
💻 H
字号:
// ImageMap.h: interface for the CImageMap class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_IMAGEMAP_H__C03EE457_213D_4B71_B1DB_74BECD298AD1__INCLUDED_)
#define AFX_IMAGEMAP_H__C03EE457_213D_4B71_B1DB_74BECD298AD1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//最小包围矩形 
typedef struct
{
	float x1;   //min x
	float y1;   //min y
	float x2;   //max x
	float y2;   //max y
}MBRECT, FAR *LPMBRECT;

class CDib;  
class CImageMap  
{
public:
	CImageMap();
	virtual ~CImageMap();
	
public:
	CString m_strMapFile;            //地图文件名,全路经
	CString m_strMapName;            //地图名称

	BOOL m_bIsLoadMap;               //标志地图是否已加载

	double m_dScale;                 //缩放比例尺
	double m_dScaleOrigin;           //原始图的比例尺

protected:
	CDib  * m_pDib;                  //BMP地图对象

	long m_x1, m_x2, m_y1, m_y2;     //地图对象显示窗口
	long m_cx, m_cy;                 //屏幕中心点
	MBRECT m_rcRect;

	long m_lImageWidth;              //图像宽度(象素)
	long m_lImageHeight;             //图像高度(象素)

	HWND     m_hWnd;                 //地图显示窗口句柄
	CDC      m_memDC;                //内存DC
	CBitmap  m_Bitmap;               //内存DC绘图用的位图对象
	CBitmap *m_pOldBitmap;           //保存内存DC原来的位图
	
	double m_dOffsetX;               //x偏移量
	double m_dOffsetY;               //y偏移量
	long m_nShiftSize;               //每次平移的尺度大小

	double m_dZoomFactor;            //缩放基数
	double m_dZoomAmount;            //缩放因子
	double m_dZoomOrigin;            //显示全图时的比例(象素单位/地图单位)
	double m_dScaleAll;              //显示全图时的缩放比例尺
	
	BOOL   m_bSetMBRC;               //是否设置了m_rcRect

public:
	//刷新地图,rcInvalid为无效区,在主窗口OnPaint或OnDraw中调用
	void Draw(CDC *pdc, CRect& rcInvalid);
	int  DrawMap();                       //显示地图

	/* 设置地图的边界和比例尺 */
	void SetMapMBRC(double left, double top, double right, double bottom, double dScale);
	BOOL IsSetMapMBRC(void);
	void SetMapHwnd(HWND hWnd);           //设置地图显示窗口句柄
	int  LoadMapFile(LPCTSTR filename);   //加载地图
	void UnloadMap();                     //卸载地图
	double Distance(double lon1, double lat1, double lon2, double lat2);//计算距离

	//地图放大、缩小
	int ZoomOut(long x, long y);          //放大地图(以给定点中心为基准)
	int ZoomOut();                        //放大地图(以屏幕中心为基准)
	int ZoomIn(long x, long y);           //缩小地图(以给定点中心为基准)
	int ZoomIn();                         //缩小地图(以屏幕中心为基准)
	int ZoomToAll();                      //显示全图
	int ZoomOut(POINT pt1, POINT pt2);
	int ZoomIn(POINT pt1, POINT pt2);

	//坐标转换
	void MapToScreen(double *x, double *y); //地图坐标转换为屏幕坐标
	void ScreenToMap(double *x, double *y); //屏幕坐标转换为地图坐标

	void MapToImage(double *x, double *y);  //地图坐标转换为图像坐标
	void ImageToMap(double *x, double *y);  //图像坐标转换为地图坐标
	void ScreenToImage(long *x, long *y);   //屏幕坐标转换为图像坐标
	void ImageToScreen(long *x, long *y);   //图像坐标转换为屏幕坐标

	//地图移动
	int  MoveDown();  //下移
	int  MoveUp();    //上移
	int  MoveRight(); //右移
	int  MoveLeft();  //左移
	//以给定尺寸平移地图,dx=+左移,=-右移;dy=+上移,=-下移
	int  MoveMap(long dx, long dy, BOOL bRedraw = TRUE);

	//把地图的中心定位到指定的点
	void CenterAt(double x, double y); 

	//设置地图显示窗口
	void SetClientRect(long x1, long y1, long x2, long y2);
	void SetClientRect(LPRECT rc);

protected:

	void DrawMap(CDC *pdc);               //显示地图

	//地图参数初始化
	void InitialParam(MBRECT mbrc);
};

#endif // !defined(AFX_IMAGEMAP_H__C03EE457_213D_4B71_B1DB_74BECD298AD1__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -