用VC++进行MapX二次开发之二教材 卡住了,救救
现在让我们来创建我们的MapX基石吧。
第一步:用VC++的程序向导来创建一个单文档程序MapXSample。
第二步:Project> Add To Project>Files,选择MapX.cpp和MapX.h。
第三步:定义一个CmapX对象。
class CMapxSampleView : public CView { …… protected: CMapX m_ctrlMapX; ……}
void CMapxSampleView::OnCreate(UINT nType, int cx, int cy){ m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this,IDC_MAP);}void CMapxSampleView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy); m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);}
void CMapxSampleView::OnSetFocus(CWnd* pOldWnd) { CView::OnSetFocus(pOldWnd); m_ctrlMapX.SetFocus();}
int CMapXSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0, 0, 100, 100), this, IDC_MAP); return 0;}
#include “MapX.h”
[解决办法]
这是我自己写的笔记,保证是绝对的正确!希望对你有扎帮助!!!!
一:使用MapX的基石,在VC下显示gst格式的地图
第一步:用MFC应用程序向导新建一个单文档的工程,名字就不妨取为:mapxdemo
第二步:Project> Add To Project>Files,选择MapX.cpp和MapX.h。同时还要手工将Mapx.h和Mapx.cpp这两个文件复制到你的工程目录中去,不然编译时会报错的
第三步:在mapxdemoView.h文件中包括它:
#include "MapX.h"
另外还要在视图类(mapxdemoView.h)中定义一个对象:
class CMapxdemoView : pubic CView
{
......
CMapX m_ctrlMapX; //这是要添加的
.....
......
}
第四步::声明一个常量。View > Resource Symbols>New>name为IDC_MAP。
第五步:在类向导(ctrl+W)中为mapxdemoView创建WM_SIZE 和 WM_CREATE的处理消息:
void CMapxSampleView::OnCreate(UINT nType, int cx, int cy)
{
m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this,IDC_MAP);
}
void CMapxSampleView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}
第六步:在类向导中为CMapXSampleView创建WM_SETFOCUS的处理消息,以确保当窗口处于活动状态时得到焦点。
void CMapxSampleView::OnSetFocus(CWnd* pOldWnd)
{
CView::OnSetFocus(pOldWnd);
m_ctrlMapX.SetFocus();
}
然后编译运行。就可以看到USA的地图了!如果没有就再试试。如果想让程序运行时不显示任何地图数据,需要将gst清空,方法如下:
int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//创建mapx控件
CRect rc(0,0,100,100);
if( !m_ctrlMapX.Create(NULL, WS_VISIBLE, rc, this, IDC_MAP) )
return -1;
//清空 gst 地图
m_ctrlMapX.SetGeoSet("");
return 0;
}
当然如果想显示自己的地图的话,在m_ctrlMapX.SetGeoSet("");中写入路径就可以了。
如m_ctrlMapX.SetGeoSet("asia.gst"); 或m_ctrlMapX.SetGeoSet("maps\\asia.gst");
这说明maps文件夹是在工程目录下的